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