我建议使用
${TM_FILEPATH/.*[\\/\\\\]([^\\/\\\\]+)[\\/\\\\]index\\.js$|.*[\\/\\\\](.*)/$1$2/}
如果您不想在输出中包含文件扩展名,请使用
${TM_FILEPATH/.*[\\/\\\\]([^\\/\\\\]+)[\\/\\\\]index\\.js$|.*[\\/\\\\](.*?)(?:\\.[^.]*)$/$1$2/}
正则表达式 #1 将按此处所示或正则表达式 #2 此处工作,请参阅其图表:

这里的重点是使用两个用|
替换运算符分隔的替代方案,它们将匹配整个字符串,同时捕获您需要的部分,确保更具体(具有已知文件名)的替代方案首先出现,而更通用的替代方案(将匹配任何文件名都将排在最后。替换模式将是两个反向引用,$1$2
因为在找到匹配项后只有一个实际上会包含一些文本。
正则表达式详细信息
请注意,反斜杠加倍,因为模式作为字符串文字传递,并且/
字符必须转义,因为字符串文字包含“字符串化”正则表达式文字。
.*[\/\\]([^\/\\]+)[\/\\]index\.js$
:
.*
- 除换行符以外的任何 0+ 个字符,尽可能多
[\/\\]
- 一个/
或\
([^\/\\]+)
- 捕获组 1:一个或多个 ( +
) 字符,而不是/
(\
是[^...]
一个否定字符类)
[\/\\]
- 一个/
或\
index\.js
- 一个index.js
子串
$
- 字符串结束
|
- 或者
.*[\/\\](.*)
:
.*
- 除换行符以外的任何 0+ 个字符,尽可能多
[\/\\]
- 一个/
或\
(.*)
- 捕获组 2:除换行符之外的任何 0+ 个字符,尽可能多
(.*?)(?:\.[^.]*)?$
- 将尽可能少地捕获除换行符之外的任何 0 个或多个字符到第 2 组,然后将尝试匹配一个可选序列.
和 0+ 个非点字符,直到字符串 ( $
) 的末尾。
所以,完整的代码片段看起来像
{
"mySnippet": {
"prefix": "cls",
"body": [
"class ${TM_FILEPATH/.*[\\/\\\\]([^\\/\\\\]+)[\\/\\\\]index\\.js$|.*[\\/\\\\](.*?)(?:\\.[^.]*)$/$1$2/} {}",
"export default ${TM_FILEPATH/.*[\\/\\\\]([^\\/\\\\]+)[\\/\\\\]index\\.js$|.*[\\/\\\\](.*?)(?:\\.[^.]*)$/$1$2/};"
]
}
}
随意调整它。