JavaScriptのreplaceはマッチした文字列を置換パターンに含めることができます。
次の例は、英数字の文字列の数字部分を「x」と「y」で挟みます。
a = "ab1234cd";
b = a.replace(/[0-9]+/, "x$&y");
b = a.replace(/[0-9]+/, "x$&y");
マッチした文字列は「$&」で指定します。
なお置換前の一部を括弧で挟むとその部分は「$1」として指定できます。括弧が複数あれば「$2」「$3」と指定します。
ここからが本題です。
IEに限っては次のようなコードが書けます。
a = "ab1234cd";
b = a.replace(/[0-9]+/, "x$0y");
b = a.replace(/[0-9]+/, "x$0y");
置換後として「$&」の代わりに「$0」が指定できます。PHPのpreg_replaceなどは「0」は全体を表すという取扱いと同じです。
しかしJavaScriptでこの指定ができるのはIEだけで、Chrome、Firefox、Safariではただの文字列を同じ扱いになり「abx$0ycd」となってしまいます。
毎度おなじみのIEだけ違う挙動をする例ですが、これに関してはIEの仕様の方が自然であるような気がします。
コメント