繁体   English   中英

不包含正则表达式中包含字符串的URL

[英]Excluding URLS that contain a string in Regex

我正在使用正则表达式将调查添加到页面,并且希望将其包括在除付款和登录页面之外的所有页面上。 我不能在正则表达式中使用环顾四周,因此我尝试使用以下内容,但它不起作用。

^/.*[^(credit|signin)].*应该捕获所有URL,除了包含credit或signin的URL

[指示字符类的开始,并且[^否定是每个字符。 因此,您的正则表达式是“任何后跟该类中没有的任何字符,后跟任何东西”,这很可能匹配任何东西。

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

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

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

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

将正则表达式中的单词列入白名单通常非常容易,通常采用以下形式:

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

模式分解为:

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

将正则表达式中的单词列入黑名单要理解起来有些复杂,但是可以通过以下方式实现:

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

模式分解为:

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

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

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


最终版本:

/^(?:(?!credit|signin).)*$/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM