正则表达式匹配除列表以外的所有子路径但不匹配基本路径

Regex to match all subpaths except a list but not the base path

我正在尝试编写一个正则表达式来匹配给定路径下的所有子路径,但有少数例外。

正则表达式:

^\/my-page\/(?!.*foo|bar|baz).*

预期行为:

/my-page/thing1 - 匹配!

/my-page/another-thing - 匹配!

/my-page/foo - 不匹配

/my-page/bar - 不匹配

/my-page/baz - 不匹配

这按预期工作了 ✅

问题:

基本路径匹配:

/my-page/ - 匹配...但我不希望它匹配。 ❌

如何调整正则表达式以防止 /my-page/ 也匹配?

您可以使用

^\/my-page\/(?!.*(?:foo|bar|baz)).+

参见regex demo

详情

  • ^ - 字符串开头
  • \/my-page\/ - /my-page/ 字符串
  • (?!.*(?:foo|bar|baz)) - 如果在除换行符之外的任何零个或多个字符之后存在 foobarbaz,则匹配失败的否定前瞻尽可能多
  • .+ - 除换行字符外的一个或多个字符,尽可能多。