我目前正在尝试编写一个用户代码段,该代码段将使用testlib
变量(例如JobsSummary)并将其转换为Kebab大小写(jobs-summary)。
${1}
将Visual Studio代码用户代码段中的变量从Pascal Case转换为Kebab Case的正确方法是什么?
"Example": {
"prefix": "test",
"body": [
"${1}",
"${1} -> ${1/(^.)+([A-Z])+/${1:/downcase}/}"
]
}
-> JobsSummary
jobs-summary
-> AnotherExampleOfSomething
答案 0 :(得分:2)
这有效:
"Example": {
"prefix": "psc",
"body": [
"${1}",
"${1} -> ${1/([A-Z][a-z]*)([A-Z][a-z]*)?([A-Z][a-z]*)?([A-Z][a-z]*)?/${1:/downcase}${2:+-}${2:/downcase}${3:+-}${3:/downcase}${4:+-}${4:/downcase}/}"
],
"description": "Convert from PascalCase to kebab-case"
},
通常,我可以使用全局修饰符使它们在更短的版本中工作,因此可以使用任意数量的“单词”。但是在这种情况下,我无法这样做。上面的代码最多可硬编码四个“单词”,例如PascalCaseThreeFour
。
它适用于一到四个“单词”,但不适用于更多单词,但是您可以轻松修改任意数量的单词。转换中有一个明显的模式可以添加更多。
您在上方看到的${3:+-}
构造意味着,如果有捕获组3,请添加连字符。
编辑:以下简化将处理PascalCase中任意数量的单词:
"${1} -> ${1/([A-Z][a-z]+)/${1:/downcase}-/g}$0"
,但将导致像这样的结尾-
:
PascalCaseThreeFourFive
-> pascal-case-three-four-five-
,如果您不介意在结尾的短划线-
上退格。否则,很容易将此代码段合并到宏中,然后删除最后一个破折号。
此外,change-case extension可能对您有用-看起来它具有kebab-case命令。
答案 1 :(得分:0)
这适用于PascalCase中的任意数量的单词,并且没有尾随破折号:
"${TM_SELECTED_TEXT} -> ${TM_SELECTED_TEXT/(^[A-Z][a-z]*|[a-z])([A-Z])?/${1:/downcase}${2:+-}${2:/downcase}/g}"
这将产生如下内容:
AnotherExampleOfSomething -> another-example-of-something
唯一的是,它不喜欢大写字母的序列(如首字母缩写词)(仅将首字母转换为小写)。但是,仅对2个字母的缩写可能会出现这种情况,因为根据the rules,较长的首字母缩写无论如何都应该使用驼峰/帕斯卡大写字母写出来(效果很好)。