你能解释下面正则表达式的语义吗?特别是,?:和()意味着什么?
/(?:^|:|,)(?:\s*\[)+/g
感谢。
答案 0 :(得分:1)
?:^|
表示 - 匹配行或匹配的开头,但不捕获组或存储返回引用
?:
表示 - 不捕获组或存储返回引用
答案 1 :(得分:1)
()
告诉解析器捕获匹配项,以便您可以引用它。
?:
内的 ()
告诉解析器不要捕获匹配
这是完整的解释:
Match the regular expression below «(?:^|:|,)»
Match either the regular expression below (attempting the next alternative only if this one fails) «^»
Assert position at the beginning of the string «^»
Or match regular expression number 2 below (attempting the next alternative only if this one fails) «:»
Match the character “:” literally «:»
Or match regular expression number 3 below (the entire group fails if this one fails to match) «,»
Match the character “,” literally «,»
Match the regular expression below «(?:\s*\[)+»
Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
Match a single character that is a “whitespace character” (spaces, tabs, and line breaks) «\s*»
Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
Match the character “[” literally «\[»
阅读Regular Expression Advanced Syntax Reference以获取有关此及其他正则表达式语法解释的解释。
答案 2 :(得分:1)
?:表示不匹配的组。通常()保存替换参考。
所以“abc”.replace(/.(.)。/,“x $ 1x”)会返回“xbx”
然后添加?:将它们视为组,但不保存它们以供日后使用。
html正则表达式中的典型用法是类似的 标签 < *(?: HREF | SRC)= '“['”]
。这会查找href或src属性,然后保存该值。
答案 3 :(得分:1)
使用括号()
,您可以将一些内容组合在一起,例如对于(?:\s*\[)+
,量词+
(一个或多个)属于整个组\s*\[
,这意味着它将在每个方括号之前匹配多个[
和可选的空格。
这些组是默认的捕获组,这意味着匹配的部分被放入变量中,并且可以使用反向引用重新使用,或者仅仅作为结果。
可以通过在开始括号后面添加?:
来更改此默认行为,因此(?:\s*\[)+
是非捕获组,即匹配的部分不会存储在某处。