【问题标题】:VS Code Snippets Multiple Transforms on a single variableVS Code Snippets 对单个变量进行多次转换
【发布时间】:2021-10-09 04:49:59
【问题描述】:

正在阅读VS Code snippet with multiple transforms,我非常努力,但无法解析它是如何完成的。

我需要使用${TM_FILEPATH} 并剪掉某个点之前的所有内容并将所有\ 替换为/

对于/path/to/lib/file.cC:\path\to\lib\file.c 这两条路径,我需要结果为/lib/file.c

我已经为我的用例完成了第一部分:

${TM_FILEPATH/.*lib//}

不过,我似乎无法做到第二个。我试过了:

 ${TM_FILEPATH/\\/\//g}

我需要同时做这两件事。如果有人回答这个问题,他们是否也可以将其分解,以便我了解发生了什么?我想学习如何做这些,而不必一直问。

【问题讨论】:

  • 链接的问题不进行多次转换,它对正则表达式(g)进行多次匹配,并巧妙地使用匹配组对每个匹配组应用不同的修改

标签: regex visual-studio-code code-snippets vscode-snippets


【解决方案1】:

这是一个蛮力的答案。 “蛮力”,因为它仅适用于文件路径的最后两段。必须有一种方法可以将其推广到输入末尾的任意指定数量的路径段。

"PS2": {
  "prefix": "ps2",
  "body": [
    "${TM_FILEPATH/.*[\\/\\\\]([^\\/\\\\]+)[\\/\\\\]/\\/$1\\//}"
  ]
}

.* 匹配我们想要的所有内容。必须这样做,否则不匹配的输入将“通过”并且不会被转换或消除。

[\\/\\\\] 匹配 \/ 这些字符必须在 sn-p 中进行两次转义。

([^\\/\\\\]+) 匹配不是\/ 的字符序列

[\\/\\\\] 匹配最后一个 \/

filePath 的 file.c 部分根本不匹配,因此它不会被转换或消除 - 这对您来说很好。

\\/$1 因为\/ 已匹配但未出现在转换中的任何位置,这些字符将不会出现在结果中。你只想要一个/$1/<and the rest unmatched here>

$1\\/ 在第 1 组之后,附加一个 /(双转义),然后是 file.c,因为它不匹配会出现在末尾。

这里是 regex101 的简化形式,没有所有的双重转义。请注意,file.c 不匹配,因此会出现在结果中。

【讨论】:

    【解决方案2】:

    您可以使用扩展名HyperSnips

    将此sn-p保存在正确目录下的all.hsnips文件中

    snippet filePart "File Part"
    `` rv = path.replace(new RegExp('.*?/path/to/'), '/'); ``
    endsnippet
    

    PS。 Hypersnips 不适用于 .txt 文件

    【讨论】:

      猜你喜欢
      • 2022-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-30
      • 1970-01-01
      • 1970-01-01
      • 2015-03-21
      • 2018-04-12
      相关资源
      最近更新 更多