You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何编写正则表达式匹配不包含多个指定单词的文本?

如何用正则在Chrome网络面板中排除多个关键词

嘿,我太懂这种“单个正则好用,组合就翻车”的挫败感了!咱们一步步拆解,搞清楚怎么写出正确的多关键词排除正则。

先搞懂单个排除的原理

你之前用的^((?!badword).)*$核心是负前瞻断言,它的逻辑是:

从字符串开头到结尾,每一个字符的位置都要满足「后面不会出现badword这个序列」。
这样整个URL里就绝对不会包含badword,完美实现单个关键词的排除。

为什么直接加管道符会失效?

你尝试用|(或逻辑)组合时,大概率是写错了结构——比如写成^((?!css|gif).)*$或者更简单的^(?!css|gif).*$,这两种写法都会出问题:

  • 后者^(?!css|gif).*$只检查URL开头是不是cssgif,如果URL中间出现(比如foo.css),还是会被匹配到,导致漏排除;
  • 前者^((?!css|gif).)*$理论上和正确写法等价,但可能你没开启Chrome的正则模式,或者测试的URL有特殊情况(比如大小写?不过Chrome网络面板过滤默认是不区分大小写的)。

正确的多排除正则写法

要同时排除多个关键词,需要给每个关键词单独加负前瞻,用逻辑与的方式叠在一起:

^((?!css)(?!gif).)*$

它的逻辑是:

整个URL的每一个位置,都要同时满足「后面不会出现css并且「后面不会出现gif」。
这样只要URL里包含cssgif任意一个,整个正则就不匹配,实现精准排除。

在Chrome网络面板里的正确用法

  1. 打开Chrome开发者工具的「网络」面板;
  2. 点击过滤框右侧的.*按钮,开启正则表达式匹配模式(这步很重要!默认是普通字符串匹配,正则会失效);
  3. 把上面的正则粘贴到过滤框里,回车即可。

这样就能自动隐藏所有包含cssgif的请求,保留JS、PNG等其他资源啦。

内容的提问来源于stack exchange,提问作者Konrad Viltersten

火山引擎 最新活动