【发布时间】:2019-11-04 17:19:08
【问题描述】:
我正在尝试创建一个基于文件路径创建类名的 sn-p。如果文件名为index.js,我希望类名取文件夹名。否则,使用文件名。
如果文件名为index.js(它正确插入文件夹名称),我有一个当前正在工作的转换(如下所示)。
我将如何扩展这一点(假设它甚至可能)也适用于第二种情况?
我确实从VSCode documentation 中注意到,您可以使用一些基本的 if/else 格式,如果存在捕获组,它们只会插入给定的文本。我已经能够让那些使用一些简单的例子。但不确定这些是否可以以某种方式用于完成我正在尝试做的事情。
当前sn-p:
{
"mySnippet": {
"prefix": "cls",
"body": [
"class ${TM_FILEPATH/[\\/\\w$]+\\/(?!index)|\\/index.js//g} {}",
"export default ${TM_FILEPATH/[\\/\\w$]+\\/(?!index)|\\/index.js//g};"
]
},
}
【问题讨论】:
-
那么,如果
index.js在c:\Users\wiktor\Documents\index.js中,那么类应该是Documents?如果是C:\index.js呢? -
@WiktorStribiżew 对,我已经让这部分与上述内容一起工作。不过,我还没有第二种情况工作(如果文件名不是索引,请在文件后命名)。在您询问的情况下,不会使用此 sn-p 。我并不是真的试图防范所有边缘情况。这将是一个特定于工作流的 sn-p。
-
试试
${TM_FILEPATH/.*[\\/\\\\]([^\\/\\\\]+)[\\/\\\\]index\\.js$|.*[\\/\\\\](.*)/$1$2/}。注意我添加了/和\路径分隔符。 -
见regex101.com/r/8xFzXL/1,这就是它的工作原理。是否按预期工作?
-
@WiktorStribiżew 正则表达式解决方案非常完美,谢谢!必须进行一些调整,因为正如 Mark 所提到的,使用 VSCode 转换引用正则表达式组是有限的。随意在我的答案中复制/粘贴我的代码示例并将其作为新答案发布,我会给你信用。再次感谢!
标签: javascript regex visual-studio-code code-snippets vscode-snippets