【问题标题】:vscode snippet transform file name regexvscode 片段转换文件名正则表达式
【发布时间】:2021-04-18 00:47:53
【问题描述】:

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

${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 {},

【问题讨论】:

  • 我不清楚您想要在Output 行上输出什么?同样的事情,只是export class FileNameOutput {}?

标签: regex visual-studio-code code-snippets regexp-replace vscode-snippets


【解决方案1】:

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

"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} 实际上成为一个转换后的捕获组。

【讨论】:

  • 非常感谢。我现在完全理解它是如何工作的 :)
猜你喜欢
  • 2021-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-31
相关资源
最近更新 更多