以下示例是使用正则表达式的 javascript 代码:
// Make a regular expression object that matches
// a JavaScript string.
var my_regexp = /"(?:\\.|[^\\\"])*"/g;
我目前对前一个正则表达式示例(/"(?:\\.|[^\\\"])*"/g
)的理解如下:
/
在开头和结尾表示将与某些字符串匹配的正则表达式的开头和结尾。
最后的g
是标志,其定义如下:
全球(多次匹配;其准确含义因人而异) 方法)
所以基本上它的含义取决于我使用正则表达式变量的函数。
(?:...)
表示非捕获组,其中...
位置的表达式将匹配零或一个时间 我的第一个疑惑:我看到了非捕获组的不同语法:(?:...)?
最后有?
。最后是否与?
之间存在差异?是*
替换?
以使其等于零或更多而不是零或一个
\\.|[^\\\"]
。 [^\\\"]
在指定除\(反斜杠)和"(引用)之外的任何字符时非常清楚。 我最后的疑惑:我最不明白的是四个字符:\\.|
。 \\
等同于反斜杠,.
我认为等同于任何角色,|
我不确定。我非常确定非捕获组的内部没有指定搜索字符串中包含\[anything]|[anything except for \ and "]
的字符,因为上面示例中的注释字面上说:{{1} }
问题:是否有人能澄清我上面的疑虑?
答案 0 :(得分:2)
以(?:
开头的群组,正如您所说的非捕获群组。这意味着它匹配的部分不存储在捕获组中,可供以后检索。使用?
创建可选组,意味着所谓匹配的部分,整个正则表达式不需要比赛。非捕获组是可选的并不常见。
交替功能匹配其两侧的序列,首先尝试使用左侧。
所以你的正则表达式匹配一个字符串
"
开头,然后是\
或"
的字符。"
结尾。 PS。您不需要转义字符类中的"
。 /"(?:\\.|[^\\"])*"/g
没问题。