JavaScript正则同一行多模式匹配异常:如何解决贪婪匹配问题
解决JavaScript正则匹配多组[xxx]{xxx}的问题
你的问题出在正则里的.*是贪婪匹配,它会尽可能匹配最长的符合条件的字符串,所以遇到多个[xxx]{xxx}模式时,会从第一个[直接匹配到最后一个},把中间的内容也包含进去。
解决方法很简单,把贪婪匹配改成非贪婪匹配,将正则里的.*替换成.*?:
const input = "[hello]{world}and[good]{night}"; const output = input.replace(/\[(.*?)\]\{(.*?)\}/gim, "<span class='top'>$1<span class='bottom'>$2</span></span>");
这样修改后:
.*?会匹配到最近的闭合括号就停止,不会过度匹配- 正则要求
]后面必须紧跟{,所以像[hello]world或者good{night}这种[]和{}不相邻的情况,不会被匹配,完全符合你的需求。
运行上面的代码,就能得到你期望的输出:
<span class='top'>hello<span class='bottom'>world</span></span>and<span class='top'>good<span class='bottom'>night</span></span>
内容的提问来源于stack exchange,提问作者lpares12
相关产品推荐
相关产品推荐

