15

Internet Explorer 10 では、次のようになります。

'abcdefghi'.match(/.?e.?/)

予想どおり と評価されます['def']が、Firefox 21.0 では と評価され['abcdefghi']ます。(この jsFiddleを参照してください。) and などのオプションのコンテンツで開始および終了する他の特定の正規表現についても、同じような予期しない動作が発生/.?e.{0,2}//.{0,2}e.{0,2}/ます。ただし、コメンターは、影響を受けない/\S?e\S?/やなどのさまざまな同様の正規表現を指摘し/(?:.?e.?)/ています。方法についても同様です。replace

明らかな何かが欠けていますか?この動作には深い理由がありますか?

4

3 に答える 3

6

tiffon が言ったように、これは SpiderMonkey (Firefox の JavaScript エンジン) のバグです。

SpiderMonkey では、Safari の JavaScriptCore JS エンジンから RegExp エンジンを使用し、そこからバグを継承しています。JSC のバグについて、バグ 119191を提出しました。

于 2013-07-28T12:21:33.530 に答える
2

バグのように見えます。問題を提出しました。

ところで、以下はうまくいきます:

'abcdefghi'.match(/.e./)
'abcdefghi'.match(/.e.?/)
'abcdefghi'.match(/.?e./)
'abcdefghi'.match(/[a-z]?e.?/)
'abcdefghi'.match(/.?e[a-z]?/)

http://jsfiddle.net/afDqC/1/

于 2013-07-28T07:46:15.930 に答える
0

他の回答が述べたように、それはバグのようです。

ただし、簡単な回避策があります。'abcdefghi'.match(/(.?e.?)/)

[0]そうすれば、(正規表現が一致した文字列全体を含む暗黙[1]のサブグループ)と(によって指定されたサブグループ())の両方で正しい結果が得られます

于 2013-07-28T07:46:49.103 に答える