关于Javascript正则表达式语法的问题

关于Javascript正则表达式语法的问题,javascript,regex,Javascript,Regex,你能解释一下下面正则表达式的语义吗?特别是?:和()的意思是什么 /(?:^|:|,)(?:\s*\[)+/g 谢谢。?:^ |表示-匹配行的开头或匹配,但不要捕获组或存储回引用 ?:方法-不捕获组或存储回引用?:^ |方法-匹配行的开头或匹配,但不捕获组或存储回引用 ?:表示-不捕获组或存储回引用()告诉解析器捕获匹配,以便您可以引用它 ?:中的()告诉解析器不要捕获匹配项 这就是全部解释: 匹配下面的正则表达式«(?:^ |::|,)» 匹配下面的正则表达式(仅当此正则表达式失败时才尝试下

你能解释一下下面正则表达式的语义吗?特别是?:()的意思是什么

/(?:^|:|,)(?:\s*\[)+/g

谢谢。

?:^ |
表示-匹配行的开头或匹配,但不要捕获组或存储回引用


?:
方法-不捕获组或存储回引用

?:^ |
方法-匹配行的开头或匹配,但不捕获组或存储回引用

?:
表示-不捕获组或存储回引用
()
告诉解析器捕获匹配,以便您可以引用它

?:
中的
()
告诉解析器不要捕获匹配项

这就是全部解释:

匹配下面的正则表达式«(?:^ |::|,)»
匹配下面的正则表达式(仅当此正则表达式失败时才尝试下一个正则表达式)«^»
断言字符串«^»开头的位置
或匹配下面第2个正则表达式(仅当此选项失败时才尝试下一个选项)«:»
匹配字符“:”字面上的«:»
或者匹配下面第3个正则表达式(如果该正则表达式不匹配,则整个组将失败)«,»
匹配字符“,”字面上的«,»
匹配«(?:\s*\[)+»下面的正则表达式
在一次和无限次之间,尽可能多次,根据需要回馈(贪婪)«+»
匹配单个“空白字符”(空格、制表符和换行符)«\s*»
在零次和无限次之间,尽可能多次,根据需要回馈(贪婪)«*»
按字面意思匹配字符“[”«\[»
阅读有关此正则表达式和其他正则表达式语法解释的说明。

()
告诉解析器捕获匹配,以便您可以引用它

?:
中的
()
告诉解析器不要捕获匹配项

这就是全部解释:

匹配下面的正则表达式«(?:^ |::|,)»
匹配下面的正则表达式(仅当此正则表达式失败时才尝试下一个正则表达式)«^»
断言字符串«^»开头的位置
或匹配下面第2个正则表达式(仅当此选项失败时才尝试下一个选项)«:»
匹配字符“:”字面上的«:»
或者匹配下面第3个正则表达式(如果该正则表达式不匹配,则整个组将失败)«,»
匹配字符“,”字面上的«,»
匹配«(?:\s*\[)+»下面的正则表达式
在一次和无限次之间,尽可能多次,根据需要回馈(贪婪)«+»
匹配单个“空白字符”(空格、制表符和换行符)«\s*»
在零次和无限次之间,尽可能多次,根据需要回馈(贪婪)«*»
按字面意思匹配字符“[”«\[»

阅读有关此正则表达式和其他正则表达式语法解释的说明。

?:表示不匹配的组。通常()会保存一个引用以供替换

所以“abc”。replace(/。(./,“x$1x”)将返回“xbx”

然后添加?:将其作为组处理,但不保存以供以后使用

html正则表达式中的典型用法如下 标签
?:表示不匹配的组。通常()保存替换的引用

所以“abc”。replace(/。(./,“x$1x”)将返回“xbx”

然后添加?:将其作为组处理,但不保存以供以后使用

html正则表达式中的典型用法如下 标签 使用括号
()
可以将一些内容组合在一起,例如,对于
(?:\s*\[)+
,量词
+
(一个或多个)属于整个组
\s*\[
,这意味着它将在每个方括号前匹配多个带有可选空格的
[

这些组是默认的捕获组,这意味着匹配的部分被放入一个变量中,并且可以使用反向引用重用,或者作为结果重用

此默认行为可以通过将
?:
放在开始括号后来更改,因此
(?:\s*\[)+
是一个非捕获组,即匹配的部分未存储在某个位置。

使用括号
()
可以将一些内容组合在一起,例如
(?:\s*\[)+
量词
+
(一个或多个)属于整个组
\s*\[
,这意味着它将在每个方括号前使用可选空格匹配多个
[

这些组是默认的捕获组,这意味着匹配的部分被放入一个变量中,并且可以使用反向引用重用,或者作为结果重用


此默认行为可以通过将
?:
放在左括号后来更改,因此
(?:\s*\[)+
是非捕获组,即匹配的零件未存储在某个位置。

您可能需要解释为什么要使用非捕获组(限制交替运算符的范围,有一个可以应用量词的单位等)@TimPietzcker我的回答基于OP的怀疑。你想要一个非捕获组可能有任何原因,但最常见的是因为你不希望它是一个。在这种情况下,很明显,括号用于第一个组的交替运算符,并且在第二个组上有一个量词。它也可以作为一个捕获组,没有严格的规则。您可能想解释为什么要使用非捕获组(限制交替运算符的范围,有一个可以应用量词的单元等)@TimPietzcker我的回答是基于OP的怀疑。你想要一个非捕获组可能有任何原因,但最常见的是因为你不希望它是一个。在这种情况下,很明显括号用于交替操作