关于Javascript Regex语法的问题

时间:2011-10-06 07:47:18

标签: javascript regex

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

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

感谢。

4 个答案:

答案 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*\[)+是非捕获组,即匹配的部分不会存储在某处。