首页 > 解决方案 > vscode 片段转换文件名正则表达式

问题描述

我正在尝试转换file-name.dto.tsFileName片段。

${TM_FILENAME_BASE/^(.*)([^.*]).*/${1:/pascalcase}$2/}

但是,我不太确定如何转换第二个或第三个捕获组。

如果我们不用括号括起来,这是否意味着我们不捕获?

  export class ${TM_FILENAME_BASE/^(.)([^.]*).*/${1:/upcase}$2/}Input {$2},
  export class ${TM_FILENAME_BASE/^(.*).*/${1:/pascalcase}$2/}Output {},

标签: regexvisual-studio-codecode-snippetsregexp-replacevscode-snippets

解决方案


对于第一行(输入行),试试这个:

"export class ${TM_FILENAME_BASE/^([^-]*)-([^.]*).*/${1:/pascalcase}${2:/pascalcase}/}Input {$2},"

  1. ${TM_FILENAME_BASE}独自一人让你file-name.dto

  2. 捕获组 1^([^-]*)为您提供第一个之前的部分-

  3. 匹配,-但您将在输出中忽略它,因此它不需要在捕获组中。

  4. 在第一个([^.]*)之后捕获第 2 组-.

  5. 其余的.*将匹配.dto再次将被忽略,因此它不需要是捕获组,但必须匹配 - 您将有效地将其替换为任何内容。

替换为转换: ${1:/pascalcase}${2:/pascalcase}因此两个捕获组的第一个字母将大写,其余小写。

在线上Output,如果您正在寻找此结果:

export class FileNameOutput {}

利用

"export class ${TM_FILENAME_BASE/^([^-]*)-([^.]*).*/${1:/pascalcase}${2:/pascalcase}/}Output {},"


以防万一您没有意识到,在您的代码中:

export class ${TM_FILENAME_BASE/^(.)([^.]*).*/${1:/upcase}$2/}Input {$2},

最后一个{$2}不是指任何捕获组 - 它在任何转换之外。它只是指一个制表位 - 你的光标会去哪里。让我知道您是否打算让决赛{$2}实际上成为一个转换后的捕获组。


推荐阅读