vscode 片段转换文件名正则表达式

vscode snippet transform file name regex

我正在尝试在片段中将 file-name.dto.ts 转换为 FileName

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

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

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

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

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

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

  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}/}Input {},

最后一个 {} 不是指任何捕获组 - 它在任何转换之外。它只是指一个制表位——你的光标将去的地方。让我知道您是否打算最终 {} 实际上是一个转换后的捕获组。