正则仅匹配首个匹配项失效:需匹配第一对大括号及后续分号
解决正则仅匹配第一对大括号及后续分号的问题
嘿,这个坑我踩过!你遇到的是正则表达式里贪婪匹配的典型问题~
问题根源
你一开始用的/({.*};)/里,.*是贪婪模式,它会尽可能匹配最长的符合规则的字符串。所以面对{text 1}; {text 2};这个示例,它会从第一个{开始,一直匹配到最后一个};,把整个字符串都吞进去,这就不是你想要的结果了。
解决方案:切换到非贪婪模式
只需要把贪婪的.*改成非贪婪的.*?,正则表达式写成:
/({.*?};)/
非贪婪模式会尽可能匹配最短的符合条件的内容,遇到第一个};就会停止匹配,正好能精准捕获到{text 1};。
进阶优化(无嵌套大括号场景)
如果你的字符串里不会出现嵌套大括号,还可以用更严谨的写法避免意外匹配:
/({[^{}]*};)/
这里[^{}]*表示匹配任意非大括号的字符,能确保只匹配到第一个闭合的},然后接上;,效果和非贪婪模式一致,但逻辑更清晰。
内容的提问来源于stack exchange,提问作者bigInt




