在 VS 代码片段中省略最后一个点字符及其后的所有内容

Omit last dot character and everything thereafter in VS code snippet

我的目标是转化

my-app/templates/components/one-directory/a-second-directory/third.hbs

<OneDirectory::ASecondDirectory::Third />

下面的代码片段完成了我需要的一切,除了删除扩展名,所以上面的例子导致 <OneDirectory::ASecondDirectory::ThirdHbs />

"Path to Angle Bracket": {
    "prefix": "path-to-angle",
    "body": [
      "<${TM_SELECTED_TEXT/.+components\/|([^\/]+)|(\/)/${1:/pascalcase}${2:+::}/g}/>",
    ],
    "description": "Converts a file path to an angle bracket component invocation."
  }

我希望能够在不知道它是什么的情况下删除扩展名 - 所以基本上删除最后一个 . 字符之后的所有内容。

正则表达式可以分解如下:

.+components\/ - 匹配 components/ 的第一个实例之前的所有内容。因为它不是捕获组的一部分,所以结果中省略了它。

([^\/]+) - 第一个捕获组。一个或多个不是 /.

的任何字符

(\/) - 第二个捕获组 - 任何 /

${1:/pascalcase} - 将第一个捕获组的匹配项转换为 Pascal 大小写。

${2:+::} - 将第二个捕获组的匹配项转换为 ::.

试试这个:

"<${TM_SELECTED_TEXT//.+components\/|([^(\/.\s)]+)|(\/)|(.*)/${1:/pascalcase}${2:+::}/g} />",

https://regex101.com/r/snLmCK/2

[并感谢您使用 :/pascalcase]