正则表达式包括某些单词但排除另一个单词

时间:2016-10-18 10:13:07

标签: regex

我正在尝试编写一个正则表达式,它将检查包含某些单词的URL并排除另一个单词。

原因是我正在尝试跟踪通过我网站的流量,我不想算任何人点击感谢页面。

例如:

  • http://www.mywebsite.com/register-now/ - MATCH
  • http://www.mywebsite.com/contact-us/ - MATCH
  • http://www.mywebsite.com/register-now/thank-you - 没有比赛
  • http://www.mywebsite.com/contact-us/thank-you - 没有比赛
  • http://www.mywebsite.com/thank-you - 没有比赛

我有2个字(register-nowcontact-us),这些字必须在网址中。但是,我必须确保1个字(thank-you)也不在URL中。

我曾尝试使用否定前瞻来检查网址是否包含感谢信,但它不起作用:

"^(?!.*\/thank\-you+)\/(contact\-us|register\-now)\/.*"

2 个答案:

答案 0 :(得分:2)

在单个正则表达式中,您可以使用否定前瞻:

(?!.*\/thank-you(?:\/|$))

RegEx Demo

    如果网址有/thanks-you/thank-you/,则
  • MULTILINE为否定匹配将导致匹配失败。
  • 如果您的文字在每行中包含多个网址,请使用{{1}}模式。

答案 1 :(得分:0)

为简单起见分开:

str.match(/(contact\-us|register\-now)/) && !str.match(/thank\-you/)