regex - VS Code Snippets 对单个变量进行多次转换
问题描述
正在阅读具有多个转换的 VS 代码片段,我非常努力,但无法解析它是如何完成的。
我需要使用${TM_FILEPATH}
并剪掉某个点之前的所有内容并将所有内容替换\
为/
.
对于 和 的路径/path/to/lib/file.c
,C:\path\to\lib\file.c
我需要的结果是/lib/file.c
我已经为我的用例完成了第一部分:
${TM_FILEPATH/.*lib//}
不过,我似乎不能做第二个。我试过了:
${TM_FILEPATH/\\/\//g}
我需要两者都做。如果有人回答这个问题,他们是否也可以将其分解,以便我了解发生了什么?我想学习如何做这些,而不必一直问。
解决方案
这是一个蛮力的答案。“蛮力”,因为它仅适用于文件路径的最后两段。必须有一种方法可以将其推广到输入末尾的任意指定数量的路径段。
"PS2": {
"prefix": "ps2",
"body": [
"${TM_FILEPATH/.*[\\/\\\\]([^\\/\\\\]+)[\\/\\\\]/\\/$1\\//}"
]
}
.*
在我们想要的之前匹配所有内容。必须这样做,否则不匹配的输入将“通过”并且不会被转换或消除。
[\\/\\\\]
匹配 a\
或 an/
这些字符必须在片段中进行双重转义。
([^\\/\\\\]+)
不匹配字符序列\
或/
[\\/\\\\]
匹配最后一个\
或一个/
filePath的file.c
部分根本不匹配,因此它不会被转换或消除 - 这对您来说很好。
\\/$1
因为\
or/
被匹配但没有出现在转换中的任何地方,这些字符将不会出现在结果中。你只想要一个/$1/<and the rest unmatched here>
$1\\/
在第 1 组之后,附加一个/
(双转义),然后file.c
因为它不匹配将出现在最后。
在这里,它以简化形式出现在regex101上,没有所有的双重转义。请注意,file.c
不匹配,因此它将出现在结果中。
推荐阅读
- appium - How can I get full list of the WebElements including hidden WebElements by scrolling?
- google-sheets - What is the function to just identify outliers in Google Sheets?
- php - How to handle OOP in this particular situation
- python - Window showing white
- python - Having trouble indexing specific vectors in dataset
- r - 如何使用 R 中的基线小时计算变化?
- c# - C# with SQL Server using Windows authentication
- android - 如何从 Room 中检索布尔值并以 LazyColumn 状态显示
- python - 使用 Google Auth 配置时从 python 访问 Elasticsearch
- javascript - NodeJS/Mongoose - 相同模式的逻辑分离+多租户