我的文件名是
一些花哨的ui.component.html
我想使用 vscode 片段将其转换为
SOME_FANCY_UI
所以基本上
- 将大写应用于每个字符
- 将所有 - 替换为 _
- 删除 .component.html
目前我有
'${TM_FILENAME/(. )(-)(. )/${1:/upcase}${2:/_}${3:/upcase}/g}'
这给了我这个
'设置-打印机-服务器-LIST.COMPONENT.HTML'
文档没有解释如何将替换与正则表达式组的转换结合使用。
我的文件名是
一些花哨的ui.component.html
我想使用 vscode 片段将其转换为
SOME_FANCY_UI
所以基本上
目前我有
'${TM_FILENAME/(. )(-)(. )/${1:/upcase}${2:/_}${3:/upcase}/g}'
这给了我这个
'设置-打印机-服务器-LIST.COMPONENT.HTML'
文档没有解释如何将替换与正则表达式组的转换结合使用。
如果您需要上层的块被分开,-或者.您可以使用
"Filename to UPPER_SNAKE_CASE": {
"prefix": "usc_",
"body": [
"${TM_FILENAME/\\.component\\.html$|(^|[-.])([^-.]+)/${1:+_}${2:/upcase}/g}"
],
"description": "Convert filename to UPPER_SNAKE_CASE dropping .component.html at the end"
}
您可以在此处检查正则表达式的工作方式。
\.component\.html$- 匹配.component.html字符串末尾|- 或者(^|[-.])-将字符串的开头或/捕获.到第 1 组([^-.]+)-捕获除第 2 组之外的任何 1+ 个字符.。${1:+_}${2:/upcase}替换的意思是:
${1:+- 如果第 1 组不为空,_- 用。。。来代替_}- 第一组处理结束${2:/upcase}- 将较高的第 2 组值放回原处。这是一个非常简单的交替正则表达式:
"upcaseSnake": {
"prefix": "rf1",
"body": [
"${TM_FILENAME_BASE/(\\..*)|(-)|(.)/${2:+_}${3:/upcase}/g}",
"${TM_FILENAME/(\\..*)|(-)|(.)/${2:+_}${3:/upcase}/g}"
],
"description": "upcase and snake the filename"
},
任何一个版本都有效。
(\\..*)|(-)|(.)三个捕获组的交替在概念上很简单。组的顺序很重要,这也是正则表达式如此简单的原因。
(\\..*)文件名中第一个点(包括第一个点)之后的所有内容.都进入第 1 组,该组不会在转换中使用。
(-)第 2 组,如果有第 2 组,请用下划线替换${2:+_}。
(.)第 3 组,所有其他字符进入第 3 组,将被大写${3:/upcase}。
请参阅regex101 演示。