我正在使用正则表达式向页面添加调查,我希望将其包含在除付款和登录页面之外的所有页面上。我无法使用环顾四周的正则表达式,所以我试图使用以下内容,但它不起作用。
^/.*[^(credit|signin)].*
哪个应该捕获除包含信用或登录
答案 0 :(得分:1)
[
表示字符类的开头,[^
否定是每个字符。因此,你的正则表达式是"任何后跟任何不在此类中的字符,后跟任何字符,"这很可能与任何东西相匹配。
由于您使用的是特定字符串,因此我认为正则表达式不合适。检查字符串中是否存在credit
和signin
会更简单,例如使用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).)*$/