首页 > 解决方案 > url 路径的正则表达式

问题描述

我想要一个正则表达式匹配包含'/food/'但不包含的路径'/food/api/'

http://example.com/food/api/pasta?sauce=true

现在我正在使用这个:

/^((?!\/food\/api\/).)*$/

这个问题是它匹配任何不包含的路径'/food/api/'

我想要实现的行为:

REGEX MATCHES
example.com/food/
example.com/food/meals

REGEX IGNORES
example.com/food/api/pasta?sauce=true
example.com/food/api/pasta
example.com/food/api/
example.com/meal
example.com/

标签: regexexpress

解决方案


((?!\/food\/api\/).)*如果它不包含子字符串,则使用这样的模式(一种缓和的贪婪令牌解决方案)将匹配整行/food/api

由于量词是 a*它也将匹配一个空行。

相反,您可以使用交替进行匹配,直到第一次出现 a,/然后是食物或饭菜,然后是正斜杠。在这个斜杠之后,检查它后面是否没有/api

^[^/]+/(?:food|meal)/(?!api/).*$

正则表达式演示

如果字符串不能包含空格,您可以使用否定字符类排除它们[^/\s]+并匹配\S*而不是.*

^[^/\s]+/(?:food|meal)/(?!api/)\S*$

正则表达式演示


推荐阅读