jQuery正则匹配双层括号内文本时误匹配整段内容如何解决
问题根源
你原有正则存在两个核心错误,导致匹配范围完全失控:
- 仅编写了单层括号的匹配规则,没有匹配要求的双层
(())标记 - 使用了贪婪匹配模式
.+,正则会从第一个识别到的左括号开始,一直匹配到文本中最后一个右括号才停止,直接吞掉了括号块之间的所有正常文本。
修正后代码
根据是否需要保留外层双层括号,选择对应写法即可:
- 需要保留双层括号,将整个
((内容))块包裹进span:
jQuery('p').html(function(i, h) { // 正则匹配完整双层括号块,非贪婪模式避免跨块匹配 return h.replace(/\(\(.+?\)\)/g, '<span class="titleEpisodeValue">$&</span>'); });
- 不需要保留双层括号,仅将括号内的文本包裹进span:
jQuery('p').html(function(i, h) { // 捕获组单独提取双层括号内部的文本 return h.replace(/\(\((.+?)\)\)/g, '<span class="titleEpisodeValue">$1</span>'); });
正则规则说明
\(:转义后的左圆括号,匹配字面量(,连续写两次\(\(即匹配标记开头的两个连续左括号.+?:非贪婪模式匹配任意字符,碰到最近的符合后续规则的内容就停止匹配,不会跨括号块吞入无关内容\):转义后的右圆括号,匹配字面量),连续写两次\)\)即匹配标记结尾的两个连续右括号$&:正则替换的特殊变量,指代本次匹配到的完整内容$1:正则替换的特殊变量,指代第一个捕获组内匹配到的内容
内容的提问来源于stack exchange,提问作者user7415742
相关产品推荐
相关产品推荐

