首页 > 解决方案 > 使用负前瞻根本不会导致匹配

问题描述

例如,我有一个^\/pref1\/pref2\/v.+\/(search)(\/.*)?$匹配的正则表达式/pref1/pref2/v1/search/suf1/suf2

但我希望它匹配那个地方不包含单词search的任何东西。为了实现这一点,我通过添加负前瞻来修改正则表达式:

^\/pref1\/pref2\/v.+\/(?!search)(\/.*)?$

但是例如这不匹配:

/pref1/pref2/v1/somethingElse/suf1/suf2 但它应该somethingElse不等于search。如何解决?

标签: regex

解决方案


您可以使用

^\/pref1\/pref2\/v[^\/]+\/(?!search(?:\/|$))[^\/]+(\/.*)?$

请参阅正则表达式演示

详情

  • ^- 字符串的开始
  • \/pref1\/pref2\/v- 一个/pref1/pref2/v字符串
  • [^\/]+- 一个或多个字符/
  • \/- 一个/字符
  • (?!search(?:\/|$))search- 紧靠右边,后面不能有字符串/或字符串结尾
  • [^\/]+- 一个或多个字符/
  • (\/.*)?- 一个可选的捕获组,匹配一个/字符,然后匹配除换行符之外的任何零个或多个字符,尽可能多
  • $- 字符串结束。

推荐阅读