如何用Userscript的@match和@exclude匹配指定层级路径而非子层级
用户脚本中@match/@exclude匹配特定层级URL的优雅方案
问题场景
想要用用户脚本的@match和@exclude规则,精准匹配特定层级的URL(每一个/对应一个层级),但完全不匹配该层级以下的子页面(也就是路径里后续还有/的页面)。
比如想匹配Reddit任意子版块的首页(像https://reddit.com/r/funny),但不匹配https://reddit.com/r/funny/submit这类子页面。之前试过的规则是:
@match https://*.reddit.com/r/*/ @exclude https://*.reddit.com/r/*/*/
但脚本还是会在子页面触发,希望只用基础的@match和@exclude解决,不用已弃用的@include或者脚本内的路径验证逻辑。
正确规则组合
直接用下面的规则就能实现需求:
@match https://*.reddit.com/r/* @match https://*.reddit.com/r/*/ @exclude https://*.reddit.com/r/*/* @exclude https://*.reddit.com/r/*/*/
规则说明
- 前两行
@match:同时覆盖带末尾斜杠和不带末尾斜杠的子版块首页(浏览器访问时两种格式都会指向同一个页面,但匹配规则对末尾斜杠敏感,所以需要都写上) - 后两行
@exclude:同样覆盖带/不带末尾斜杠的所有子层级页面,确保任何在子版块下的二级路径都会被排除
之前规则失效的原因
- 只匹配了带末尾斜杠的首页,但用户访问不带斜杠的URL时,部分脚本引擎可能会在浏览器重定向前就触发脚本,导致漏匹配或误触发
- 只排除了带末尾斜杠的子层级页面,漏掉了不带斜杠的情况,比如
https://reddit.com/r/funny/submit这类URL会绕过@exclude规则,导致脚本仍在子页面运行
内容的提问来源于stack exchange,提问作者ETL
相关产品推荐
相关产品推荐

