正则表达式匹配并替换 vscode 中的重复模式
regex match and replace in vscode for repetitive pattern
我有这个 svg
<circle id="a/b/c" stroke="#2C2C2C" stroke-width="2" fill="#FFF" fill-rule="nonzero" cx="141" cy="21" r="9"/><text id="a/b/c-something" font-size="10" fill="#2C2C2C"><tspan x="0" y="10">a/b/c Something</tspan></text>
我想在 circle
中将 id="a/b/c"
替换为 id="a-b-c"
并且
id="a/b/c-something"
到 id="a-b-c-something"
在 text
并排除 a/b/c Something
被替换。
我正在使用 vscode,我已经尝试 (id=.+)\/(.+)
,但它似乎无法正确匹配。我要
一个通用的方法是匹配并捕获第一个符合条件的/
字符之前的部分,匹配这个字符而不捕获,然后匹配右侧的部分以确保上下文正确,然后替换为第 1 组值 + 新字符 + 第 2 组值。
大体方案是
Find: (left-hand context)text to remove/replace(right-hand context)
Replace: new_text
然后重复,直到不再对文档进行任何更改。
在你的情况下,你可以使用
查找内容:(\sid="[^"/]*)/([^"]*"[^>]*>)
替换为:-
见regex demo。 详情:
(
- 第 1 组:
\s
- 一个空格
id="
- 固定文本
[^"]*
- 除 "
字符 以外的零个或多个字符
)
- 第 1 组结束
/
- 一个 /
字符
(
- 第 2 组:
[^"]*
- "
以外的零个或多个字符
"
- 一个 "
字符
[^>]*
- >
以外的零个或多个字符
>
- 一个 >
字符
)
- 第 2 组结束。
这将适用于文件搜索和替换和In-document搜索和替换功能。
如果您使用 In-document 搜索和替换 功能对单个文档应用正则表达式,您可以使用 lookaround-based 模式来实现单次传球目标:
查找内容:(?<=\sid="[^"]*)/(?=[^"]*"[^>]*>)
替换为:-
参见this regex demo。 详情:
(?<=\sid="[^"]*)
- 与紧接在前面的位置相匹配的正后视
\s
- 一个空格
id="
- 固定文本
[^"]*
- 除 "
字符 以外的零个或多个字符
/
- 一个 /
字符
(?=[^"]*"[^>]*>)
- 与紧随其后的位置匹配的正循环
[^"]*
- "
以外的零个或多个字符
"
- 一个 "
字符
[^>]*
- >
以外的零个或多个字符
>
- 一个 >
字符。
我有这个 svg
<circle id="a/b/c" stroke="#2C2C2C" stroke-width="2" fill="#FFF" fill-rule="nonzero" cx="141" cy="21" r="9"/><text id="a/b/c-something" font-size="10" fill="#2C2C2C"><tspan x="0" y="10">a/b/c Something</tspan></text>
我想在 circle
中将 id="a/b/c"
替换为 id="a-b-c"
并且
id="a/b/c-something"
到 id="a-b-c-something"
在 text
并排除 a/b/c Something
被替换。
我正在使用 vscode,我已经尝试 (id=.+)\/(.+)
,但它似乎无法正确匹配。我要
一个通用的方法是匹配并捕获第一个符合条件的/
字符之前的部分,匹配这个字符而不捕获,然后匹配右侧的部分以确保上下文正确,然后替换为第 1 组值 + 新字符 + 第 2 组值。
大体方案是
Find: (left-hand context)text to remove/replace(right-hand context)
Replace: new_text
然后重复,直到不再对文档进行任何更改。
在你的情况下,你可以使用
查找内容:(\sid="[^"/]*)/([^"]*"[^>]*>)
替换为:-
见regex demo。 详情:
(
- 第 1 组:\s
- 一个空格id="
- 固定文本[^"]*
- 除"
字符 以外的零个或多个字符
)
- 第 1 组结束/
- 一个/
字符(
- 第 2 组:[^"]*
-"
以外的零个或多个字符
"
- 一个"
字符[^>]*
->
以外的零个或多个字符
>
- 一个>
字符
)
- 第 2 组结束。
这将适用于文件搜索和替换和In-document搜索和替换功能。
如果您使用 In-document 搜索和替换 功能对单个文档应用正则表达式,您可以使用 lookaround-based 模式来实现单次传球目标:
查找内容:(?<=\sid="[^"]*)/(?=[^"]*"[^>]*>)
替换为:-
参见this regex demo。 详情:
(?<=\sid="[^"]*)
- 与紧接在前面的位置相匹配的正后视\s
- 一个空格id="
- 固定文本[^"]*
- 除"
字符 以外的零个或多个字符
/
- 一个/
字符(?=[^"]*"[^>]*>)
- 与紧随其后的位置匹配的正循环[^"]*
-"
以外的零个或多个字符
"
- 一个"
字符[^>]*
->
以外的零个或多个字符
>
- 一个>
字符。