如何修改正则表达式实现多匹配而非单一匹配?
解决正则贪婪匹配导致单一结果的问题
这问题我太懂了!你当前用的正则/\{\d+\}.*/g里,.*是贪婪匹配——它会尽可能多地抓取字符,从第一个{1}开始直接吃到字符串末尾,自然就把整个内容当成一个匹配项了。要拿到两个匹配结果,得限制它的匹配范围,这里有两种靠谱的调整方案:
方案1:使用非贪婪匹配+正向预查
把正则改成:
/\{\d+\}.*?(?=\{\d+\}|$)/g
拆解一下关键部分:
.*?:非贪婪版本的任意字符匹配,会尽可能少地抓取内容,直到遇到后面的停止条件(?=\{\d+\}|$):正向预查,告诉正则“匹配到下一个{数字}或者字符串结尾就停下来”
用你的测试字符串{1}I still don't know what I was{1} waiting for And my测试,会得到两个匹配结果:
{1}I still don't know what I was{1} waiting for And my
方案2:使用字符集限制匹配范围
如果你的场景里,匹配内容不会包含{字符,也可以用更简洁的写法:
/\{\d+\}[^{]*/g
这里[^{]*表示匹配任意非{的字符,直到遇到{或者字符串结束,完美避开贪婪匹配的问题,结果和方案1一致。
你可以根据自己的实际场景选其中一种,两种都能解决你的问题~
内容的提问来源于stack exchange,提问作者Thomas Vermaercke
相关产品推荐
相关产品推荐

