编写匹配指定路径排除fixed-courses前缀正则及对应反向正则
正则解决方案
第一个匹配正则(排除fixed-courses前缀)
你原先的正则存在两个缺陷:一是没有适配路径末尾带query参数的场景,二是没有添加fixed-前缀的排除逻辑。
修正后的正则如下:
^/(?!fixed-)[^/]+-courses/[^/]+/[^/?]+(\?.*)?$
逻辑说明:
^/匹配路径开头的斜杠(?!fixed-)为否定前瞻断言,强制当前位置之后不能出现fixed-字符,直接排除所有fixed-courses前缀的路径[^/]+-courses/匹配任意非斜杠开头的*-courses/前缀段[^/]+/匹配第二段路径[^/?]+匹配第三段路径,主动排除query参数的?分隔符(\?.*)?可选匹配末尾的query参数部分,适配带参数的路径场景
匹配验证
命中正则的合法路径:
/xyz-courses/test/test/abc-courses/test-abc/test-xyz/abc-courses/test-abc/test-xyz?itsok=yes
被正则排除的路径:
/fixed-courses/test/test/fixed-courses/test-abc/test-xyz/fixed-courses/test-abc/test-xyz?itsok=yes
第二个反向匹配正则(匹配所有不符合第一个正则的内容)
你之前的写法误用了字符集语法,反向匹配需要通过全局否定前瞻实现,正确写法如下:
^(?!/(?!fixed-)[^/]+-courses/[^/]+/[^/?]+(\?.*)?$).*$
逻辑说明:
- 外层
(?!第一个正则表达式$)为全局否定前瞻,要求整个字符串不能命中第一个正则的匹配规则 - 末尾的
.*匹配所有符合上述否定条件的内容
内容的提问来源于stack exchange,提问作者Thompson
相关产品推荐
相关产品推荐

