在Visual Studio代码段中,我正在编写将蛇形字符串转换为 Camel 形的示例。
从docs我知道语法是
'${' var '/' regex '/' (format | text)+ '/' options '}'
所以我想出了这个:
${TM_FILENAME_BASE/([a-z])([a-z]*)_+([a-z])([a-z]*)_+/${1:/upcase}$2${3:/upcase}$4/}
但是,此代码仅适用于具有2个元素的字符串(例如“carrot_cake”),而我想处理具有任意数量的元素(“blueberry_pie_with_a_cup_of_coffee”)的字符串。
我猜想
'regex'
和'format'
需要某种递归,但是我不知道该怎么做。一个如何匹配任意数量的模式出现?
最佳答案
要将任意数量的由“_”分隔的单词转换为CamelCase,请尝试:
编辑:在2018年10月(但尚未添加到2020年2月的摘要语法文档中)vscode添加了/pascalcase
转换,请参见commit。我已经修改了下面的代码以使用/pascalcase
转换。但是,它仅适用于CamelCase的some_file => SomeFile
类型。
但是它可以使用许多字符作为分隔符,所有这些都可以工作:
blueberry_pie_with_a_cup_of_coffee
blueberry-pie-with-a-cup-of-coffee
blueberry-pie-with_a-cup-of_coffee
blueberry-pie-with.a-cup-of.coffee
blueberry*pie-with.a*cup-of.coffee
blueberry*[email protected]*cup1of.coffee
blueberry*[email protected]*cup1of.coffee
"camelCase": {
"prefix": "_cc",
"body": [
// "${TM_FILENAME_BASE/([a-z]*)_+([a-z]*)/${1:/capitalize}${2:/capitalize}/g}"
"${TM_FILENAME_BASE/(.*)/${1:/pascalcase}/g}"
],
"description": "Transform to camel case"
},
carrot_cake.txt
-> CarrotCake
blueberry_pie_with_a_cup_of_coffee.js
-> BlueberryPieWithACupOfCoffee
[我假设
CamelCase
是您想要的形式,还有其他形式,例如camelCase
。]对于
camelCase
:"${TM_FILENAME_BASE/([a-z]*)[-@_.*0-9]+([a-z]*)/$1${2:/capitalize}/g}"
将所需的分隔符列表放在
[-@_.*0-9]+
部分中。 +
量词允许您使用carrot--cake
例如-多个分隔符字之间。感谢使用正则表达式的
[list the separators]
部分的其他答案。请注意,结尾处的“g”标志为您完成了大部分工作,但无论有多少匹配项都超出了明确捕获的两个匹配项。
我将捕获组保留为
([a-z]*)
,就如您所愿。您可能需要使用([A-Za-z0-9]*)
以获得更大的灵活性。关于regex - 片段正则表达式: match arbitrary number of groups and transform to CamelCase,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48104851/