pim*_*vdb 8 javascript regex jquery
我在jQuery源代码中遇到了这个正则表达式:
...
rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
...
Run Code Online (Sandbox Code Playgroud)
我想知道为什么它相当复杂.我对第二部分背后的原因特别感兴趣:
(?:.*? rv:([\w.]+))?
Run Code Online (Sandbox Code Playgroud)
我做了一些研究,但我无法弄清楚正则表达式的这部分是什么.
(?:) to match but not capture
.*? any amount of any character
rv: something literal
([\w.]+) one or more word characters or a dot
? appear 0 or 1 time
Run Code Online (Sandbox Code Playgroud)
特别是,最后?一点对我来说没有多大意义.如果存在或不存在由第二部分定义的子字符串,则整个第二部分匹配.通过一些反复试验,正则表达式似乎与以下内容不同:
/(mozilla)/
Run Code Online (Sandbox Code Playgroud)
有人可以说明正则表达式的第二部分应该做什么吗?它有什么约束; 什么字符串失败通过/(mozilla)/或反过来?
这两个正则表达式将匹配相同的字符串,但会在其捕获组中存储不同的信息。
对于字符串:mozilla asdf rv:sadf
/(mozilla)(?:.*? rv:([\w.]+))?/
$0 = 'mozilla asdf rv:sadf'
$1 = 'mozilla'
$2 = 'sadf'
/(mozilla)/
$0 = 'mozilla'
$1 = 'mozilla'
$2 = ''
Run Code Online (Sandbox Code Playgroud)