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

需求:匹配"my company"但排除img和a标签内容的正则表达式

解决匹配"my company"并排除img/a标签内容的正则方案

我看你现在的正则没能正确排除img标签属性里的内容,比如figtitle里的"my company"也被误匹配了——这是因为原来的正则逻辑没覆盖到整个img标签的范围,也没处理好a标签的完整内容。给你两个更可靠的方案,适配不同的运行环境:

方案一:支持PCRE的环境(比如PHP、Regexr切换到PCRE模式)

用(*SKIP)(*FAIL)技巧先跳过所有img和a标签,再匹配目标文本:

(<img\b[^>]*>|<a\b[^>]*>.*?</a>)(*SKIP)(*FAIL)|my company

记得加上i修饰符(实现不区分大小写匹配)。

工作原理拆解:

  • <img\b[^>]*>:精准匹配所有自闭合的img标签(包括里面的所有属性内容),确保标签内的文本直接被跳过。
  • <a\b[^>]*>.*?</a>:匹配完整的a标签(从起始标签到闭合标签),非贪婪的.*?避免误匹配多个a标签的内容。
  • (*SKIP)(*FAIL):告诉正则引擎跳过这些匹配到的标签内容,不再参与后续的匹配检查。
  • |my company:匹配所有不在上述标签范围内的"my company"文本。

用你的测试字符串验证的话,只会匹配到img标签后面、a标签前面的那个my company,img的figtitle和a标签内的内容都会被正确排除。

方案二:JavaScript环境(不支持(*SKIP)(*FAIL))

如果是在JavaScript里使用,可以用负向环视来实现需求:

my company(?!(?<=<img\b[^>]*).*?>)(?!(?<=<a\b[^>]*).*?</a>)

加上gi修饰符(全局匹配+不区分大小写)。

工作原理拆解:

  • (?!(?<=<img\b[^>]*).*?>):确保当前的"my company"不在img标签的属性范围内。
  • (?!(?<=<a\b[^>]*).*?</a>):确保当前的"my company"不在a标签的内容范围内。

这样也能达到排除img和a标签内内容的效果。

内容的提问来源于stack exchange,提问作者Bhatu Pawar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:19:56