vscode 片段转换自正则表达式

问题描述

我正在尝试将“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 {},

解决方法

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

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

  1. ${TM_FILENAME_BASE} 独自让您file-name.dto

  2. Capture group 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} 变成一个转换后的捕获组。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...