IE10のRegExpの不具合

電子書籍「はじめての正規表現 for Web Creator」の表紙画像Internet Explorer 10のJavaScriptで、正規表現(RegExp)の不具合を見つけましたので、紹介します。

RegExpオブジェクトには「rightContext」というプロパティがあります。
このプロパティは、マッチした部分より後の文字列を表すプロパティです。

例えば、以下のようにmatchメソッドを実行して、文字列「abc」の中から「aが1文字以上連続する部分」を探すとします。
この場合、「abc」の先頭の「a」がマッチしますので、RegExp.rightContextの値は「bc」になります。

'abc'.match(/a+/)

ここで、以下の正規表現を考えてみます。
これは、「a以外の文字が0文字以上連続する部分」にマッチさせる処理です。

'abc'.match(/[^a]*/)

「a以外の0文字以上の連続」には、空文字も含みます。
「a」の前にも空文字があると考えられますので、上記の正規表現は空文字にマッチします。
そして、RegExp.rightContextの値は「abc」になるはずです。

実際、Google Chrome/Firefox/Operaではその通りの結果が得られました。
ところが、Internet Explorer 10で上記の処理を行うと、「空文字にマッチする」という点は正しく動作したものの、RegExp.rightContextの値も空文字になってしまいました。

とりあえず、マイクロソフトの「Contact Us」のページでこの不具合を報告してみました。
不具合が修正されることを望みます。

MT Cloud Starter Kit
Movable Typeのプラグイン集「MT Cloud Starter Kit」をぜひご利用ください