为什么正则表达式中的*.*返回undefined

A. *_*uff 3 javascript regex

至少,在Javascript中,在Chrome和Node.js上进行了测试:

new RegExp(/foo(optional)*boo/).exec('foooptionalboo')
Run Code Online (Sandbox Code Playgroud)

将与optional括号中的匹配:

[ 'foooptionalboo',
'optional',
index: 0,
input: 'foooptionalboo' ]
Run Code Online (Sandbox Code Playgroud)

但是如果你想在那之间有一些东西optional:

new RegExp(/foo.*(optional)*.*boo/).exec('foooptionalboo')
Run Code Online (Sandbox Code Playgroud)

然后optional找不到:

[ 'foooptionalboo',
'optional',
index: 0,
input: 'foooptionalboo' ]
Run Code Online (Sandbox Code Playgroud)

为什么是这样?

Que*_*tin 5

之前的.*比赛有机会.optional(optional)*

让它变得非贪婪(带有a ?),如果跟随它的东西将不匹配.

/foo.*?(optional)*.*boo/.exec("foooptionalboo")
Run Code Online (Sandbox Code Playgroud)