如何编写仅匹配HTML中a标签class属性的正则表达式?
正则调整方案
问题根因
你之前的正则没有限定class所属的标签类型,所以会命中所有带class属性的标签,包括mark标签,不符合需求。
调整思路
在匹配逻辑前增加a标签的锚定规则,确保class属性的搜索范围只在<a到对应标签闭合符>之间,只会匹配a标签内的class属性。
可用正则
适配原生HTML文本
捕获组2即为a标签的class属性值:/<a[^>]*?class=(["'])(.*?)\1/gi
适配你示例中已转义为HTML实体的字符串
捕获组1即为a标签的class属性值:/<a[^&]*?class="(.*?)"/gi
规则说明
- 先锚定
<a(或转义后的<a)作为匹配起始,锁定a标签范围 - 用非贪婪匹配
[^>]*?(转义场景用[^&]*?)跳过a标签内class之前的其他属性,不会超出当前a标签的范围 - 用捕获组提取class属性值,符合你的取值需求
匹配效果
针对你给出的示例内容,上述正则匹配后得到的所有class值均为com-link,不会命中其他标签的class属性。
内容的提问来源于stack exchange,提问作者Juan Pravata
相关产品推荐
相关产品推荐

