在我正在编写的Visual Studio代码段中,我想将snake大小写字符串转换为camel大小写。
从文档中我知道语法是
'${' 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”),而我希望处理具有任意数量元素的字符串(“bluebruy_pie_with_a_cup_of_coffee”)。
我猜想在'regex'
和'format'
中需要某种递归,但是我不知道该怎么做。
如何匹配任意数量的阵列引用?
2条答案
按热度按时间bpzcxfmw1#
vscode v1.75添加了一个
Transform to Camel Case
命令,因此您可以选择结果并触发该命令,而不是使用代码片段转换。vscode v1.58添加了一个
/camelcase
转换。这使得您的用例现在非常容易。"${1/(.)(.*)/${1:/upcase}${2:/camelcase}/}"
从
blueberry_pie_with_a_cup_of_coffee
到BlueberryPieWithACupOfCoffee
"${1/(.*)/${1:/camelcase}/}"
//只需捕获整个内容从
blueberry_pie_with_a_cup_of_coffee
到blueberryPieWithACupOfCoffee
vscode的实现使用以下正则表达式:
[a-zA-Z0-9]
,因此除这些字符之外的任何字符都将被视为分隔符,并且后面的"单词"将大写。以前的答案:
要将任意数量的以"_"分隔的单词转换为CamelCase,请尝试:
/pascalcase
转换,请参见commit。我修改了下面的代码以使用/pascalcase
转换。但它仅适用于some_file => SomeFile
类型的CamelCase。但它可以使用许多字符作为分隔符,这些都可以:
carrot_cake.txt
-〉CarrotCake
blueberry_pie_with_a_cup_of_coffee.js
-〉BlueberryPieWithACupOfCoffee
[我假设
CamelCase
是您想要的形式,还有其他形式,例如camelCase
。]对于**
camelCase
**:把你想要的分隔符列表放在
[-@_.*0-9]+
部分。+
量词允许你使用carrot--cake
,例如-单词之间的多个分隔符。感谢另一个答案使用了正则表达式的[list the separators]
部分。请注意,末尾的"g"标志为您完成了大部分工作,它可以获取两个显式捕获的匹配项之外的任意多个匹配项。
我将捕获组保留为
([a-z]*)
,因为您拥有它们。您可能希望使用([A-Za-z0-9]*)
以获得更大的灵活性。x6h2sr282#
vs代码段转换为camelCase:
Package 器是
${1:}
,内部为
${TM_FILENAME_BASE/^(.)([a-zA-Z0-9]*)([-_.])(.*)/${1:/downcase}${2}${4:/pascalcase}/}
Package 为
${}
内部为
TM_FILENAME_BASE/^(.)([a-zA-Z0-9]*)([_\\W])(.*)/${1:/downcase}${2}${4:/pascalcase}/
字符串为
TM_FILENAME_BASE
--------------------------------------------------------------拆分
第1部分是
/^(.)([a-zA-Z0-9]*)([-_.])(.*)
第1.1部分是
^(.)
→$1
,第一个字符第1.2部分是
([a-zA-Z0-9]*)
→$2
第1.3部分为
([_\\W])
→$3
,分隔符,忽略第1.4部分是
(.*)
→$4
--------------------------------------------------替换
第2部分是
/${1:/downcase}${2}${4:/pascalcase}/
第2.1部分
${1:/downcase}
→小写第2.2部分
${2}
→正常第2.3部分
${4:/pascalcase}
服务条→ fooBar服务
不够强,但足够了。