JavaScript の String.prototype.match で、マッチしなかった ()
の値が IE だけ異なる。
// foo または数字にマッチし、数字だったら後方参照したい
pattern = /foo|(\d+)/;
// () にマッチする場合は期待通り
number = "123";
number.match(pattern); // ["123", "123"]
// () にマッチしない場合は IE だけ異なる
text = "foo";
text.match(pattern);
// ["foo", undefined] (Chrome 23, Safari 6, Firefox 17, Opera 12, IE9)
// ["foo", ""] (IE8)
IE10 は環境が手元にないので未検証。
ECMAScript 3 / 5 では undefined になるのが正しい挙動 (コメント参照) で、IE8 の挙動がおかしい。