gpt4 book ai didi

javascript - 使用 RegExp 了解一些 JavaScript

转载 作者:行者123 更新时间:2023-11-28 07:05:20 25 4
gpt4 key购买 nike

我有以下js代码

var regex = new RegExp('([\'"]?)((?:\\\\\\1|.)+?)\\1(,|$)', 'g'),
key = regex.exec( m ),
val = regex.exec( m );

我想了解一下。特别是:

  • 为什么 RegExp 的定义中有那么多反斜杠?我可以清楚地看到 \\1 是对第一个保存的元素的引用。为什么在使用 ' 而不是 "的新正则表达式中,我们需要使用 \\1 而不是简单的 \1

  • 为什么keyval这两个定义之间有一个逗号?我可能猜测这取决于使用 "g" 找到的“实例”,但对我来说仍然不是很清楚。

我尝试使用

执行代码
m = 'batman, robin' 

结果非常困惑,我无法很好地解释它。

代码取自 JQuery Cookbook, 2.12

最佳答案

why there are all those backslash in the definition of the RegExp?

"\\" 是一个字符串,其值为 \。一个反斜杠用作转义符,第二个反斜杠用作值。然后,在正则表达式中,您还需要再次转义反斜杠字符,因为反斜杠字符用于在正则表达式中表示特殊事物。

例如

"\\1"

是一个字符串,其值为\1,在正则表达式中,它与第一个捕获的组匹配。

"\\\\"

是一个字符串,其值为\\,在正则表达式中,它匹配单个\字符。

"\\\\\\1"

是一个字符串,其值为\\\1,在正则表达式中,它匹配单个\,后跟第一个捕获的组。

这种需要转义反斜杠,然后再次转义它们的方式称为“双重转义”。您需要双重转义的原因是为了在正则表达式中获得正确的值。第一次转义是为了确保字符串具有正确的值,第二次转义是为了使正则表达式匹配正确的模式。

why there is a comma between the two definitions of key and val?

您发布的代码是变量声明。格式化后更容易查看:

var regex = ...,
key = ...,
val = ...;

列表中的每个变量名称都是通过 var 关键字声明的。与单独声明关键字相同:

var regex,
key,
val;

regex = ...
key = ...
val = ...

这与使用不同的 var 关键字声明每个 var 相同:

var regex = ...
var key = ...
var val = ...

关于javascript - 使用 RegExp 了解一些 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31756202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com