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

RegEx for matching a URL containing one word and excluding another

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

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

,我希望它匹配

如果不包含 products,我发现可以工作的 Regex 是这样的:^((?!products).)*$每次都失败。

这是一个示例url我希望它不匹配:

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

但如果是:

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

它应该匹配。

如何解决这个问题?

您可以使用正面前瞻

(?!.*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))
})