我建议使用
${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/};"
]
}
}
随意调整它。