理解这个正则表达式的例子

时间:2016-06-07 05:47:21

标签: javascript regex

以下示例是使用正则表达式 javascript 代码:

// Make a regular expression object that matches
// a JavaScript string.
var my_regexp = /"(?:\\.|[^\\\"])*"/g;

我目前对前一个正则表达式示例(/"(?:\\.|[^\\\"])*"/g)的理解如下:

  • /在开头和结尾表示将与某些字符串匹配的正则表达式的开头和结尾。

  • 最后的g标志,其定义如下:

  

全球(多次匹配;其准确含义因人而异)   方法)

所以基本上它的含义取决于我使用正则表达式变量的函数。

  • (?:...)表示非捕获组,其中...位置的表达式将匹配一个时间

我的第一个疑惑:我看到了非捕获组的不同语法:(?:...)?最后有?。最后是否与?之间存在差异?是*替换?以使其等于更多而不是一个

  • 非捕获组的内部是\\.|[^\\\"][^\\\"]在指定除\(反斜杠)和"(引用)之外的任何字符时非常清楚。

我最后的疑惑:我最不明白的是四个字符:\\.|\\等同于反斜杠,.我认为等同于任何角色,|我不确定。我非常确定非捕获组的内部没有指定搜索字符串中包含\[anything]|[anything except for \ and "]的字符,因为上面示例中的注释字面上说:{{1} }

问题:是否有人能澄清我上面的疑虑?

1 个答案:

答案 0 :(得分:2)

(?:开头的群组,正如您所说的非捕获群组。这意味着它匹配的部分不存储在捕获组中,可供以后检索。使用?创建可选组,意味着所谓匹配的部分,整个正则表达式不需要比赛。非捕获组是可选的并不常见。

交替功能匹配其两侧的序列,首先尝试使用左侧。

所以你的正则表达式匹配一个字符串

  • "开头,然后是
  • 转义字符
  • 不是\"的字符。
  • 最后以"结尾。

PS。您不需要转义字符类中的"/"(?:\\.|[^\\"])*"/g没问题。