正则表达式匹配并替换 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=" - 固定文本
    • [^"]* - 除 " 字符
    • 以外的零个或多个字符
  • / - 一个 / 字符
  • (?=[^"]*"[^>]*>) - 与紧随其后的位置匹配的正循环
    • [^"]* - "
    • 以外的零个或多个字符
    • " - 一个 " 字符
    • [^>]* - >
    • 以外的零个或多个字符
    • > - 一个 > 字符。