包含一个字符串且不包含另一个字符串的行的正则表达式

时间:2016-05-23 15:04:42

标签: javascript regex editor pcre

我有以下正则表达式,以便在支持PCRE的编辑器中打开的任何javascript文件中匹配包含console.log()alert()函数的所有行。

^.*\b(console\.log|alert)\b.*$

但我遇到许多包含window.alert()行的文件,用于提醒重要邮件,我不想删除/替换它们。

所以关于如何正则表达式匹配(单线正则表达式而不需要频繁运行)的所有行包含console.log()alert()但不包含单词window的问题。如何逃避\不可避免的圆括号(括号),使它们成为字符串文字的一部分?

我试过跟随正则表达式但是徒劳无功:

^.*\b(console\.log|alert)((?!window).)*\b.*$

1 个答案:

答案 0 :(得分:2)

你应该使用负面看起来像这样:

^(?!.*window\.).*\b(console\.log|alert)\b.*$

如果字符串window.存在,负面看起来将断言无法匹配。

Regex Demo

对于括号,您可以使用反斜杠对它们进行转义,但由于您有单词边界字符,因此如果放置转义括号,它将不匹配,因为它们不是单词字符。

  

元字符\ b是一个像插入符和美元符号的锚。   它匹配一个称为“单词边界”的位置。这场比赛   是零长度。

     

有三种不同的职位符合词边界:

     
      
  • 在字符串中的第一个字符之前,如果第一个字符是a   字符。
  •   
  • 字符串中的最后一个字符后,如果是最后一个字符   character是一个单词字符。
  •   
  • 字符串中的两个字符之间,   其中一个是单词字符而另一个不是单词字符。
  •