在VSCode用户片段中将Pascal大小写转换为Kebab大小写

时间:2018-11-06 21:41:12

标签: regex visual-studio-code

我目前正在尝试编写一个用户代码段,该代码段将使用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

2 个答案:

答案 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,较长的首字母缩写无论如何都应该使用驼峰/帕斯卡大写字母写出来(效果很好)。