正则表达式,用于匹配包含一个单词但排除另一个单词的URL

时间:2019-05-21 18:04:37

标签: javascript regex regex-negation regex-lookarounds regex-greedy

我发现了一个正则表达式的示例,如果字符串不包含特定单词,该正则表达式将匹配。但是我正在寻找一种匹配的东西,如果它包含一个单词而不是另一个单词。示例:

我正在处理基于RegEx的URL排除。如果网址包含collections而不包含products

,我希望它匹配

我发现不包含products的正则表达式是这样的:^((?!products).)*$效果很好,但是每当我添加支票以确保其中有集合时,它都会失败时间。

以下是我不匹配的示例网址:

https://dummysite.com/collections/frontpage/products/myproduct

但是如果是这样的话

https://dummysite.com/collections/frontpage/

它应该匹配。

如何解决此问题?

1 个答案:

答案 0 :(得分:3)

您可以使用正向超前

(?!.*products)(?=.*collections)
      |               |___________  Positive lookahead ( For must condition)
      |___________________________  Negative lookahead ( For must not condition)

let urls = ['https://dummysite.com/collections/frontpage/products/myproduct','https://dummysite.com/collections/frontpage/']

urls.forEach(url=>{
  console.log(url, '\nResult --->', /^(?!.*products)(?=.*collections).*$/.test(url))
})