在Internet Explorer 10中,这样做:
'abcdefghi'.match(/.?e.?/)
在 Chrome 29.0 下,/.?e.{0,2}/
和 /.{0,2}e.{0,2}/
等正则表达式评估为 ['def']
,与预期相符。但是,在 Firefox 21.0 中,它们评估为 ['abcdefghi']
(请参见此 jsFiddle)。对于某些同时以可选内容开头和结尾的其他正则表达式,如 /.?e.{0,2}/
和 /.{0,2}e.{0,2}/
,我得到了同样意外的行为;然而评论者指出各种类似的正则表达式,例如 /\S?e\S?/
和 /(?:.?e.?)/
,它们则没有受影响。同样适用于 replace
方法。
我是否遗漏了一些明显的事情?这种行为有什么深层原因吗?
e de ef cdef
+1 对于这个。 - Burhan Khalid'abcdefghi'.match(/(?:.?e.?)/)
。但是,我猜这是个错误。 - Jonathan Lonowski/.?.?/
正常工作,/e.?/
和/.?e/
也是如此。 - SheetJS['def']
。 - falsetru.{0,2}e.?
而不是.?e.?
,导致结果为cdef
而不是我在问题中提到的def
。我会更新 Fiddle 以消除这种不一致性。 - ruakh'abcdefghi'
,但使用'abcdefghi'.match(/.?(e.?)/)
可以正确地对其进行分组;这很奇怪。 - Burhan Khalid