Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.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 - Fatal编程技术网

生成与Javascript字符串匹配的正则表达式对象。解释方法

生成与Javascript字符串匹配的正则表达式对象。解释方法,javascript,regex,Javascript,Regex,下面是《Javascript:好的部分》一书中的正则表达式 这个[^\\\\\\\\\\\\\\\\\]表达式在这里匹配什么?Unwrappingvar my\u regexp=new regexp(“\”(?:\.[^\\\\\\\\”)*”,“g”): 匹配“,后跟任意数量的或非\和非”,后跟“。此外,由于组具有(?:…),因此它实际上不会捕获任何内容,它只会检查此类模式是否存在 例如,在字符串I“li.ke”donuts.I“h\ate”potates.中,它将匹配“li.ke”,但不会匹

下面是《Javascript:好的部分》一书中的正则表达式


这个
[^\\\\\\\\\\\\\\\\\]
表达式在这里匹配什么?

Unwrapping
var my\u regexp=new regexp(“\”(?:\.[^\\\\\\\\”)*”,“g”)

匹配
,后跟任意数量的
或非
\
和非
,后跟
。此外,由于组具有
(?:…)
,因此它实际上不会捕获任何内容,它只会检查此类模式是否存在


例如,在字符串
I“li.ke”donuts.I“h\ate”potates.
中,它将匹配
“li.ke”
,但不会匹配
“h\ate”
,因为
正在展开
var my\u regexp=new regexp(“\”(?:\。[^\\\\\\\\\\\\\\\\\\\\\\\\\”),'g')*

匹配
,后跟任意数量的
或非
\
和非
,后跟
。此外,由于组具有
(?:…)
,因此它实际上不会捕获任何内容,它只会检查此类模式是否存在


例如,在字符串
I“li.ke”donuts.I“h\ate”potates.
中,它将匹配
“li.ke”
,但不会匹配
“h\ate”
,因为在JavaScript中,字符串被
(或
,此正则表达式不支持)而
\
用于转义原本具有不同含义的字符

现在,
[^\\\\\\\\\\\\\\\\\\\\\\\\\\
是一个字符类,用于非
\
的字符。然而,因为我们使用字符串文字来定义正则表达式,
需要转义,并且因为
\
在字符串和正则表达式中都有特殊含义,所以我们也需要转义它们

\"        starting characters
\\"       escape `\` for regex
\\\"      escape `"` for regex
\\\\\\"   escape `\` for string
\\\\\\\"  escape `"` for string
如果对字符串使用
,或者使用regex文本,则更简单

new RegExp("\"(?:\\.|[^\\\\\\\"])*\"", "g");
new RegExp('"(?:\\.|[^\\\\\\"])*"', 'g');
/"(?:\.|[^\\\"])*"/g
事实上,
在正则表达式中没有特殊含义,因此不需要对其进行转义

/"(?:\.|[^\\"])*"/g
还要注意,
既不是
\
也不是
,因此
|
构造是毫无意义的。我猜这是一个错误,它应该是
\\.
-即
\
后跟任何字符。这需要四个
\
原件,而不是两个。如果没有此更正,表达式将无法匹配字符串,如
“ab\\c”

如果我们想同时支持
,那么事情将变得非常复杂,我们可能应该使用简单的逐字符解析器,而不是正则表达式


在JavaScript中,字符串被
(或
,此正则表达式不支持)包围,并且
\
用于转义原本具有不同含义的字符

现在,
[^\\\\\\\\\\\\\\\\\\\\\\\\\\
是一个字符类,用于非
\
的字符。但是,因为我们使用字符串文字来定义正则表达式,
需要转义,因为
\
在字符串和正则表达式中都有特殊的含义,所以我们也需要对它们进行转义

\"        starting characters
\\"       escape `\` for regex
\\\"      escape `"` for regex
\\\\\\"   escape `\` for string
\\\\\\\"  escape `"` for string
如果对字符串使用
,或者使用regex文本,则更简单。以下都是相同的

new RegExp("\"(?:\\.|[^\\\\\\\"])*\"", "g");
new RegExp('"(?:\\.|[^\\\\\\"])*"', 'g');
/"(?:\.|[^\\\"])*"/g
事实上,
在正则表达式中没有特殊含义,因此不需要对其进行转义

/"(?:\.|[^\\"])*"/g
还要注意的是,
既不是
\
也不是
,因此
构造是毫无意义的。我猜这是一个错误,它应该是
\\.
-即
\
后跟任何字符。这需要四个
\
原件,而不是两个。如果没有此更正,表达式将无法匹配字符串,如
“ab\\c”

如果我们想同时支持
,那么事情将变得非常复杂,我们可能应该使用简单的逐字符解析器,而不是正则表达式


问题是什么?我们必须现在解决吗/@ItiTyagi给定的exp是一个与javascript字符串匹配的正则表达式。我只是想知道这个[^.\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\意思是在给定的表达式中,实际上有额外的反斜杠用于特殊字符[^.\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\。两个斜杠没有意义。@thg435谢谢您的编辑。事实上,我有这本书的旧版本。请注意,海报上粘贴的表达式不正确,应该是
\\\\\。
@RobinsGupta:在我的这本书中,字符串版本有四个斜杠。两个斜杠没有意义。@thg435谢谢您的编辑。事实上,我有这本书的旧版本。