Nai*_*ith 3 regex visual-studio-code
我目前正在尝试编写一个用户片段,该片段将采用变量${1}
(例如 JobsSummary)并将其转换为 Kebab 案例(jobs-summary)。
"Example": {
"prefix": "test",
"body": [
"${1}",
"${1} -> ${1/(^.)+([A-Z])+/${1:/downcase}/}"
]
}
Run Code Online (Sandbox Code Playgroud)
将 Visual Studio 代码用户片段中的变量从 Pascal Case 转换为 Kebab Case 的正确方法是什么?
JobsSummary
->jobs-summary
AnotherExampleOfSomething
->another-example-of-something
从 vscode v1.69 开始更新:添加了一个新命令:
Transform to Kebab Case
editor.action.transformToKebabcase
Run Code Online (Sandbox Code Playgroud)
默认情况下它是未绑定的,以便在您的keybindings.json
:
Transform to Kebab Case
editor.action.transformToKebabcase
Run Code Online (Sandbox Code Playgroud)
先前的答案,在上述新命令之前。
这有效:
"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"
},
Run Code Online (Sandbox Code Playgroud)
通常我能够让它们在更短的版本中工作 - 使用全局修饰符 - 因此对于任意数量的“单词”。但在这种情况下我无法这样做。上面的内容是最多四个“单词”的硬编码,例如PascalCaseThreeFour
.
它适用于一到四个“单词”,但不适用于更多单词,但您可以轻松修改任意数量的单词。添加更多的转换有一个明显的模式。
您在上面看到的构造${3:+-}
意味着如果存在捕获组 3,请添加连字符。
编辑:以下简化将处理 PascalCase 中的任意数量的单词:
"${1} -> ${1/([A-Z][a-z]+)/${1:/downcase}-/g}$0"
Run Code Online (Sandbox Code Playgroud)
但会导致-
像这样的尾随:
PascalCaseThreeFourFive
->pascal-case-three-four-five-
如果您不介意在尾随破折号上退格-
。否则,很容易将此片段合并到宏中,然后删除最后一个破折号。
另外,更改大小写扩展可能对您有用 - 它看起来有一个 kebab-case 命令。
更新:
请参阅我的答案,了解一个非常强大的工作示例,该示例可以处理许多情况,包括大写序列和许多其他奇怪的情况:
"snake": {
"prefix": "snake",
"body": "${TM_SELECTED_TEXT/([A-Z]{2,})(?=[A-Z][a-z]+[0-9]*|$)|([A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+)([- _])?/${1:/downcase}${2:/downcase}${2:+_}/gm}"
},
Run Code Online (Sandbox Code Playgroud)
这适用于 PascalCase 中的任意数量的单词并且没有尾随破折号:
"${TM_SELECTED_TEXT} -> ${TM_SELECTED_TEXT/(^[A-Z][a-z]*|[a-z])([A-Z])?/${1:/downcase}${2:+-}${2:/downcase}/g}"
Run Code Online (Sandbox Code Playgroud)
这将产生类似这样的结果:
AnotherExampleOfSomething -> another-example-of-something
Run Code Online (Sandbox Code Playgroud)
唯一的问题是,它不喜欢大写序列,例如首字母缩略词(只有第一个字符会小写)。然而,它可能只适用于 2 个字母的缩写,因为根据规则,较长的缩写词无论如何都应该使用驼峰/帕斯卡大小写(这很好用)。
归档时间: |
|
查看次数: |
3244 次 |
最近记录: |