如何用正则表达式匹配<p></p>标签对之间单独存在的%字符
问题根因
你编写的正则存在两个核心缺陷:
- 使用了贪婪匹配的
*量词,(.|\n|\r)*会尽可能多的吞噬字符,直接从首个<p>匹配到最后一个</p>,出现跨多标签命中的问题 - 未限制p标签内部的内容规则,只要区间内出现%就会命中,不管是否包含其他字符
修正方案
场景1:严格匹配p标签内仅存在单个%,无任何其他字符(包括空白、换行)
/<p>%<\/p>/g
仅命中<p>%</p>结构。
场景2:支持p标签与%之间存在空白字符(换行、空格、制表符等),适配换行场景
/<p>\s*%\s*<\/p>/g
可命中以下结构:
<p>%</p> <p> % </p> <p> % </p>
场景3:兼容带属性的p标签
如果需要匹配<p class="demo">%</p>这类带属性的p标签结构,调整为:
/<p[^>]*>\s*%\s*<\/p>/g
内容的提问来源于stack exchange,提问作者Kevin Pione
相关产品推荐
相关产品推荐

