正则表达式:匹配一个子字符串,但稍后排除另一个子字符串

时间:2013-12-19 19:38:13

标签: javascript regex

尝试编写与某些网址匹配的正则表达式。出于我们的目的,我们假设URL是:

http://website.com/Section/subsection/Cows
http://website.com/Section/Cows
http://website.com/Section/subsection/Chickens

我想要匹配:

  • 包含/ Section /
  • 的网址
  • 除非后面是/ Chickens

我最接近的是/\/Section\/([a-zA-Z0-9]+)\/(?!Chickens)/gi

这适用于第一个网址,但第二个网址不会匹配。我知道这是因为它没有[a-zA-z0-9]+部分,但我不知道如何解决它。

3 个答案:

答案 0 :(得分:3)

你很亲密。这是正则表达式:

\/Section\/(?!.*\/Chickens)

它只是匹配部分,然后断言后跟“/ Chickens”的任何内容都无法匹配。

如果您希望它捕获URL路径而不是仅测试匹配,则可以使用额外的.*(在否定前瞻之外)关闭正则表达式。

答案 1 :(得分:0)

你关闭了。试试这个正则表达式:

/\/Section\/([a-z0-9]+)(?!\/Chickens)/gi

答案 2 :(得分:0)

这个也拒绝了“/ Section / Chickens”:

var r = /\/Section\/(?!(.+\/)*Chickens(\/|\?|#|$))/;
r.test('/Section/Cows'); // true
r.test('/Section/Chickens'); // false
r.test('/Section/CowsChickens'); // true
r.test('/Section/ChickensCows'); // true
r.test('/Section/Cows/Chickens'); // false
r.test('/Section/Cows/Cows/Chickens'); // false
r.test('/Section/Cows/Chickens/Cows'); // false