JavaScriptのreplaceでIEだけ違う挙動をする例

Pocket

JavaScriptのreplaceはマッチした文字列を置換パターンに含めることができます。
次の例は、英数字の文字列の数字部分を「x」と「y」で挟みます。

a = "ab1234cd";
b = a.replace(/[0-9]+/, "x$&y");

マッチした文字列は「$&」で指定します。
なお置換前の一部を括弧で挟むとその部分は「$1」として指定できます。括弧が複数あれば「$2」「$3」と指定します。

ここからが本題です。
IEに限っては次のようなコードが書けます。

a = "ab1234cd";
b = a.replace(/[0-9]+/, "x$0y");

置換後として「$&」の代わりに「$0」が指定できます。PHPのpreg_replaceなどは「0」は全体を表すという取扱いと同じです。
しかしJavaScriptでこの指定ができるのはIEだけで、Chrome、Firefox、Safariではただの文字列を同じ扱いになり「abx$0ycd」となってしまいます。
毎度おなじみのIEだけ違う挙動をする例ですが、これに関してはIEの仕様の方が自然であるような気がします。

[ 2016年3月2日 | カテゴリー: JavaScript | タグ: , ]

« | »

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報