jab*_*tta 5 javascript regex code-snippets visual-studio-code vscode-snippets
我正在尝试创建一个片段,该片段根据文件路径创建类名。如果文件名为index.js,我希望类名采用文件夹名称。否则,使用文件名。
index.js如果文件被命名(它正确插入文件夹名称),我有一个当前正在工作的转换(如下所示) 。
我将如何扩展这一点(假设有可能)也适用于第二种情况?
我确实从VSCode 文档中注意到,您可以使用一些基本的 if/else 格式,它们仅在捕获组存在时插入给定的文本。我已经能够让那些人通过一些简单的例子来工作。但不确定这些是否可以以某种方式用来完成我想做的事情。
当前片段:
{
"mySnippet": {
"prefix": "cls",
"body": [
"class ${TM_FILEPATH/[\\/\\w$]+\\/(?!index)|\\/index.js//g} {}",
"export default ${TM_FILEPATH/[\\/\\w$]+\\/(?!index)|\\/index.js//g};"
]
},
}
Run Code Online (Sandbox Code Playgroud)
我建议使用
${TM_FILEPATH/.*[\\/\\\\]([^\\/\\\\]+)[\\/\\\\]index\\.js$|.*[\\/\\\\](.*)/$1$2/}
Run Code Online (Sandbox Code Playgroud)
如果您不想在输出中包含文件扩展名,请使用
${TM_FILEPATH/.*[\\/\\\\]([^\\/\\\\]+)[\\/\\\\]index\\.js$|.*[\\/\\\\](.*?)(?:\\.[^.]*)$/$1$2/}
Run Code Online (Sandbox Code Playgroud)
正则表达式 #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/};"
]
}
}
Run Code Online (Sandbox Code Playgroud)
您可以随意调整它。
| 归档时间: |
|
| 查看次数: |
2783 次 |
| 最近记录: |