如何编写匹配/es/开头多段路径且不以.html结尾的正则表达式
正则调整方案
原有正则的问题
- 末尾的
.*[.]html$逻辑完全相反,主动匹配以.html结尾的路径,不符合排除需求 .*匹配规则过于宽泛,会跨/匹配,无法严格控制路径为三级结构[aA-zZ]写法存在语法问题,ASCII范围A-z包含了[\]^_``等非字母字符,正确大小写字母范围应为[a-zA-Z]`
可用的正则写法
你可以用负向预查实现排除.html后缀的要求,同时严格匹配/es/xxx/xxx/xxx格式的三级路径:
^(?!.*\.html$)\/es\/[^\/]+\/[^\/]+\/[^\/]+$
规则说明
^匹配字符串开头,确保从路径起始位置校验(?!.*\.html$)负向先行预查,要求整个路径不能以.html结尾\/es\/匹配固定前缀/es/[^\/]+匹配单个路径段(不含斜杠的任意字符),三个分段对应你示例中的whatever1/whatever2/whatever3三级结构$匹配字符串结尾,避免匹配更长的路径
扩展适配
如果允许路径后携带query参数、hash锚点,不需要严格匹配到路径结尾,可以调整为:
^(?!.*\.html($|[?#]))\/es\/[^\/]+\/[^\/]+\/[^\/]+([?#].*)?$
内容的提问来源于stack exchange,提问作者aa_cr
相关产品推荐
相关产品推荐

