2

我的文件名是

一些花哨的ui.component.html

我想使用 vscode 片段将其转换为

SOME_FANCY_UI

所以基本上

  1. 将大写应用于每个字符
  2. 将所有 - 替换为 _
  3. 删除 .component.html

目前我有

'${TM_FILENAME/(. )(-)(. )/${1:/upcase}${2:/_}${3:/upcase}/g}'

这给了我这个

'设置-打印机-服务器-LIST.COMPONENT.HTML'

文档没有解释如何将替换与正则表达式组的转换结合使用。

4

2 回答 2

8

如果您需要上层的块被分开,-或者.您可以使用

"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 组值放回原处。
于 2019-06-27T14:42:23.977 回答
0

这是一个非常简单的交替正则表达式:

"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 演示

于 2021-11-21T23:42:14.100 回答