正则表达式匹配和替换vscode中的重复模式

爱丽丝和

我有这个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>

我想替换id="a/b/c"to id="a-b-c"in thecircleid="a/b/c-something"to id="a-b-c-something"intext并排除a/b/c Something被替换。

我正在使用 vscode,并且我已经尝试过(id=.+)\/(.+),但它似乎无法正确匹配它。我想要

维克托·斯特里比泽夫

一个通用的方法是匹配并捕获第一个符合条件的/char之前的部分,匹配这个char而不捕获,然后匹配右边的部分以确保上下文正确,然后替换为Group 1 value + new char + 第 2 组值。

一般方案是

Find:    (left-hand context)text to remove/replace(right-hand context)
Replace: $1new_text$2

然后重复,直到不再对文档进行更改。

在您的情况下,您可以使用

查找内容:   (\sid="[^"/]*)/([^"]*"[^>]*>)
替换为$1-$2

请参阅正则表达式演示详情

  • (- 第一组:
    • \s- 一个空格
    • id="- 固定文本
    • [^"]*- 零个或多个字符以外的"字符
  • )- 第 1 组结束
  • /- 一个/字符
  • (- 第 2 组:
    • [^"]*- 零个或多个字符"
    • "- 一个"字符
    • [^>]*- 零个或多个字符>
    • >- 一个>字符
  • )- 第 2 组结束。

这适用于文件搜索和替换以及文档内搜索和替换功能。

如果您使用文档内搜索和替换功能对单个文档应用正则表达式,则可以使用基于环视的模式一次性实现目标:

查找内容:   (?<=\sid="[^"]*)/(?=[^"]*"[^>]*>)
替换为-

请参阅此正则表达式演示详情

  • (?<=\sid="[^"]*)- 与紧接在其前面的位置相匹配的正向回溯
    • \s- 一个空格
    • id="- 固定文本
    • [^"]*- 零个或多个字符以外的"字符
  • /- 一个/字符
  • (?=[^"]*"[^>]*>)- 与紧随其后的位置匹配的正向超前
    • [^"]*- 零个或多个字符"
    • "- 一个"字符
    • [^>]*- 零个或多个字符>
    • >- 一个>字符。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章