You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求匹配含任意属性及嵌套strong标签的h1-h5标签的正则表达式

匹配h1-h5标签(含任意属性与嵌套strong)的正则表达式

嘿,这里有个能精准满足你需求的正则表达式,我会一步步拆解每个部分,帮你搞懂它的工作逻辑:

/<h([1-5])(\s+[^>]+)?>(?:<strong>(?<content>.*?|<strong>(?&content)<\/strong>)*<\/strong>|[^<]+)*<\/h\1>/gs

正则各部分拆解

  • <h([1-5]):匹配h1到h5的开标签起始,([1-5])捕获标题级别(1-5),后续用来匹配对应的闭合标签
  • (\s+[^>]+)?:匹配任意数量的属性(可选):
    • \s+:匹配属性前的空白字符
    • [^>]+:匹配除>外的任意字符(也就是属性内容,比如id="some_id"或class="title")
    • ?:表示这部分可以不存在(即标题标签没有属性的情况)
  • (?:<strong>(?<content>.*?|<strong>(?&content)<\/strong>)*<\/strong>|[^<]+)*:匹配标签内部内容,支持任意层级嵌套的strong标签:
    • (?: ... ):非捕获分组,用来整合规则但不额外捕获内容
    • <strong>(?<content>.*?|<strong>(?&content)<\/strong>)*<\/strong>:通过递归命名组匹配多层嵌套的strong,(?<content>...)定义命名组,(?&content)引用该组实现递归,能支持无限层级的嵌套
    • |[^<]+:或者匹配非标签的纯文本内容
    • *:允许上述内容重复任意次(包括0次)
  • <\/h\1>:匹配对应的闭合标签,\1是反向引用,对应之前捕获的标题级别(比如h5的闭合标签就是</h5>)
  • /gs:正则修饰符,g表示全局匹配,s表示.可以匹配换行符(处理跨多行的标签内容)

示例验证

对于你给出的示例标签:

<h5 id="some_id"><strong><strong><strong>SOME_TEXT</strong></strong></strong></h5>

这个正则可以完美匹配整个标签,包括id属性和三层嵌套的strong标签。

注意事项

  • 这个正则基于PCRE引擎(支持递归),如果是在JavaScript等不支持递归的环境中,可以用近似版本(虽无法处理无限嵌套,但能覆盖绝大多数场景):
    /<h([1-5])(\s+[^>]+)?>(?:<strong>)*.*?(?:<\/strong>)*<\/h\1>/gs
    
  • 正则处理HTML并非最优方案,如果是实际项目里,优先考虑用DOM解析器(比如浏览器的document.querySelector或Node.js的cheerio库)处理HTML标签,这样更可靠,能避免正则搞不定的复杂嵌套或不规范标签问题。

内容的提问来源于stack exchange,提问作者Bishal Banik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:14:53