排除在Regex中包含字符串的URL

时间:2015-05-11 18:19:09

标签: javascript regex

我正在使用正则表达式向页面添加调查,我希望将其包含在除付款和登录页面之外的所有页面上。我无法使用环顾四周的正则表达式,所以我试图使用以下内容,但它不起作用。

^/.*[^(credit|signin)].* 哪个应该捕获除包含信用或登录

的所有网址

2 个答案:

答案 0 :(得分:1)

[表示字符类的开头[^否定是每个字符。因此,你的正则表达式是"任何后跟任何不在此类中的字符,后跟任何字符,"这很可能与任何东西相匹配。

由于您使用的是特定字符串,因此我认为正则表达式不合适。检查字符串中是否存在creditsignin会更简单,例如使用JavaScript:

-1 === string.indexOf("credit") && -1 === string.indexOf("signin")

或者您可以检查正则表达式匹配

false === /credit|signin/.test(string)

答案 1 :(得分:0)

正则表达式中的白名单通常非常简单,通常遵循以下形式:

^.*(?:option1|option2).*$

模式分解为:

  • ^ - 字符串开头
  • .* - 0个或更多非换行符*
  • (?: - 打开非捕获组
    • option1|option2 - |分隔的白名单选项列表
  • ) - 关闭非捕获组
  • .* - 0个或更多非换行符
  • $ - 字符串结尾

将正则表达式中的单词列入黑名单有点复杂,但可以通过以下方式使用模式来完成:

^(?:(?!option1|option2).)*$

模式分解为:

  • ^ - 字符串开头
  • (?: - 打开非捕获组
    • (?! - 打开否定前瞻(字符串中的下一个字符不得匹配否定前瞻中包含的值)
      • option1|option2 - |分隔的黑名单选项列表
    • ) - close negative lookahead
    • . - 一个非换行符*
  • ) - 关闭非捕获组
  • * - 重复群组0次或以上
  • $ - 字符串结尾

基本上,此模式会检查黑名单中的值是否不会出现在字符串中的任何位置。

*确切字符因语言而异,因此请谨慎使用

最终版本:

/^(?:(?!credit|signin).)*$/
相关问题