Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 包含一个字符串但不包含另一个字符串的行的正则表达式_Javascript_Regex_Editor_Pcre - Fatal编程技术网

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

Javascript 包含一个字符串但不包含另一个字符串的行的正则表达式,javascript,regex,editor,pcre,Javascript,Regex,Editor,Pcre,我手头有以下正则表达式,可以匹配在支持PCRE的编辑器中打开的任何javascript文件中包含console.log()或alert()函数的所有行 ^.*\b(console\.log|alert)\b.*$ 但是我遇到许多文件包含用于提醒重要消息的window.alert()行,我不想删除/替换它们 因此,问题是如何将包含console.log()和alert()但不包含wordwindow的所有行与正则表达式匹配(单行正则表达式,无需频繁运行)。另外,如何对\无法回避的圆括号(括号)进

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

^.*\b(console\.log|alert)\b.*$
但是我遇到许多文件包含用于提醒重要消息的
window.alert()
行,我不想删除/替换它们

因此,问题是如何将包含
console.log()
alert()
但不包含word
window
的所有行与正则表达式匹配(单行正则表达式,无需频繁运行)。另外,如何对
\
无法回避的圆括号(括号)进行转义,使其成为字符串文字的一部分

我试着遵循正则表达式,但没有成功:

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

您应该使用一个负面的lookhead,如下所示:

^(?!.*window\.).*\b(console\.log|alert)\b.*$
如果字符串
窗口存在,则负lookhead将断言不可能匹配

至于括号,可以用反斜杠转义,但是因为有单词边界字符,所以如果放转义括号,它将不匹配,因为它们不是单词字符

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

有三种不同的位置可以作为单词边界:

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

您应该使用一个负面的lookhead,如下所示:

^(?!.*window\.).*\b(console\.log|alert)\b.*$
如果字符串
窗口存在,则负lookhead将断言不可能匹配

至于括号,可以用反斜杠转义,但是因为有单词边界字符,所以如果放转义括号,它将不匹配,因为它们不是单词字符

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

有三种不同的位置可以作为单词边界:

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


如果他们两个都不在那里怎么办?一个字符串必须存在,另一个字符串必须不存在吗?如果两个字符串都不存在,那么就没有匹配项,因为这不是我要回复/删除的行,如果
window
alert
都在同一行,如
window.alert()
那么它不应该匹配,所以
警报
或控制台应该在那里,但在同一行
窗口
中不应该出现。简言之,只匹配具有
alert()
console.log()
且不具有
窗口的行。您能否详细说明一下您的意思:“如何转义不可由\分隔的圆括号(括号),使其成为字符串文字的一部分”?你到底需要什么?无需在字符串中转义
,您可以在正则表达式中使用反斜杠来转义它们。我尝试通过
^(?!window\)..\b(console\.log | alert\()\b.*
在同一正则表达式中精确匹配
警报(
),但正如您在演示链接中看到的,它不起作用。从上一个
中删除
\b
^(?!*window\).*\b(console\.log | alert\()$
如果两者都不存在会发生什么?是否必须有一个字符串存在,另一个不存在?如果两个字符串都不存在,那么就没有匹配项,因为它不是我要回复/删除的行,如果
window
alert
都在同一行,如
window.alert()
那么它不应该匹配,所以
警报
或控制台应该在那里,但在同一行中
窗口
不应该存在。简而言之,只匹配具有
警报()
控制台.log()
且没有
窗口
的行。您能详细说明一下这句话的意思吗:“如何转义圆括号(括号))如果要使它们成为字符串文字的一部分,\,它们是不可逃避的?您到底需要什么?不需要在字符串中转义
,您可以在正则表达式中使用反斜杠来转义它们。我试图通过
^(?!window\)在同一正则表达式中完全匹配
警报(
).\b(控制台\.log |警报)()\b、 *$
,但正如您在演示链接中看到的,它不起作用。请从上一个
^(?。*窗口\.)中删除
\b
。\b(控制台\.log |警报\)().*$
谢谢你的回答,它很有效,你能回答我的子问题吗?在什么情况下,括号不能用反斜杠转义,在这些情况下,我应该如何转义?可以用反斜杠转义,但因为你有一个单词边界字符,如果你放了转义的参数,它将不匹配。你必须删除它第二个单词边界。所以我必须强制删除单词边界字符?如果你想匹配捕获组中的paren,是的。谢谢你的回答,它可以工作,你能回答我的子问题吗?在什么情况下括号不能用反斜杠转义,在那些情况下我应该如何转义?它们可以是esc带反斜杠的类人猿,但由于您有一个单词边界字符,如果您放置转义的paren,它将不匹配。您必须删除第二个单词边界。因此,我必须强制删除单词边界字符?如果您要匹配捕获组中的paren,可以。