/.?e.?/匹配整个字符串,而不是预期的子字符串

rua*_*akh 14 javascript regex firefox

在Internet Explorer 10中,这个:

'abcdefghi'.match(/.?e.?/)
Run Code Online (Sandbox Code Playgroud)

['def']按照我的预期评估,但在Firefox 21.0中,它评估为['abcdefghi'].(请参阅此jsFiddle.)对于以可选内容开头和结尾的某些其他正则表达式,我得到了同样的意外行为,例如/.?e.{0,2}//.{0,2}e.{0,2}/; 然而,评论者指出了各种类似的正则数据,例如/\S?e\S?//(?:.?e.?)/,并没有受到影响.这同样适用于该replace方法.

我错过了一些明显的东西吗 这种行为有一些深层次的原因吗?

小智 6

正如tiffon所说,这是SpiderMonkey(Firefox的JavaScript引擎)中的一个错误.

在SpiderMonkey中,我们使用Safari的JavaScriptCore JS引擎中的RegExp引擎,并继承了该错误.我为JSC中的错误提交了错误119191.