Regex url路径的正则表达式

Regex url路径的正则表达式,regex,express,Regex,Express,我希望正则表达式在包含'/food/'但不包含'/food/api/'的路径上匹配: 现在我用的是: /^((?!\/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 ex

我希望正则表达式在包含
'/food/'
但不包含
'/food/api/'
的路径上匹配:

现在我用的是:

/^((?!\/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/

使用像这样的模式((?!\/food\/api\/)*(一种代币解决方案)将匹配整行,如果它不包含子字符串
/food/api

^[^/]+/(?:food|meal)/(?!api/).*$
由于量词是一个
*
,它也将匹配一个空行

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

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

如果字符串不能包含空格,可以使用求反字符类
[^/\s]+
将其排除,并匹配
\s*
而不是
*

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

需要什么语法来缩短此字符串,以便它执行“包含”检查,而不是在“http/s”处启动字符串?@OP我添加了一个更新。在那种情况下,你可以省去协议。