在字符串之间匹配所有的 (+) 符号

3
我可以帮您进行翻译,以下是翻译的结果:

我正在尝试在Sublime Text上捕获这个。

拥有这个:

-webkit-calc(50%+4px/2+32px-32px*23%)

想要在计算器中捕获所有的加号和减号符号,以便我可以在它们之间添加一个空格...

就像这样:

-webkit-calc(50% + 4px/2 + 32px - 32px*23%)

我已经有这个了,但是它会缓存 calc(***) 中的所有内容,而我只想要所有的 + 和 -。

(?<=calc\()(.+)(?=\))

希望你们能帮我解决这个问题,谢谢!提前致谢。
1个回答

4
你的(?<=calc\()(.+)(?=\))不能正常工作,因为它只能抓取在行中calc(和最后一个)之间的内容。您需要仅在这些定界符内部匹配+-,而这就是\G运算符发挥作用的地方。
如果没有嵌套的括号,您可以使用
(?:calc\(|(?!^)\G)[^)+-]*\K[-+]

$0 替换为。 为了更安全,请在 calc 前加上单词边界:\bcalc

请参见正则表达式演示

enter image description here V

enter image description here

该模式匹配:

  • (?:calc\(|(?!^)\G) - 匹配 calc((用 calc\()\bcalc\() 进行匹配)或前一个成功匹配的结尾(使用 (?!^)\G
  • [^)+-]* - 匹配 0+ 个字符,不包括 )+-
  • \K - 忽略到目前为止匹配的字符
  • [-+] - 匹配 -+

如果您只想在缺少空格的位置添加空格,可以匹配所有运算符周围的空格并将它们替换为单个空格:

(?:calc\(|(?!^)\G)[^)+-]*?\K\s*([-+])\s*
                             ^^^    ^^^^

将其替换为$1。这将把-webkit-calc(50%+ 4px/2 +32px - 32px*23%)转换为-webkit-calc(50% + 4px/2 + 32px - 32px*23%)


只是为了明确一点:在SublimeText的S&R中使用的Boost库支持\K - Wiktor Stribiżew
1
你是最棒的!你刚刚给了我一个直接完美的答案,并且给了我一个解决方案,你知道在解决更多空间后会发生什么。真的非常感谢! - aPinix
非常欢迎,感谢你的愉快语气。 - Wiktor Stribiżew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接