JavaScriptのreplaceで置換後の文字列に関数を使う
JavaScriptでreplaceを使うとき、置換後の文字列に関数を指定できますが、そのときの動きについて調べてみました。
例1
moto = "123×456";
saki = moto.replace(/(\d*)(\D*)(\d*)/, function ($0, $1, $2, $3) {
return "(0)" + $0 + "(1)" + $1 + "(2)" + $2 + "(3)" + $3;
});
document.write(saki);
saki = moto.replace(/(\d*)(\D*)(\d*)/, function ($0, $1, $2, $3) {
return "(0)" + $0 + "(1)" + $1 + "(2)" + $2 + "(3)" + $3;
});
document.write(saki);
【結果】(0)123×456(1)123(2)×(3)456
例2
saki = moto.replace(/(\d*)(\D*)(\d*)/, function ($1, $2, $3, $4) {
return "(1)" + $1 + "(2)" + $2 + "(3)" + $3 + "(4)" + $4;
});
return "(1)" + $1 + "(2)" + $2 + "(3)" + $3 + "(4)" + $4;
});
【結果】(1)123×456(2)123(3)×(4)456
例3
saki = moto.replace(/(\d*)(\D*)(\d*)/, function ($4, $3, $2, $1) {
return "(1)" + $1 + "(2)" + $2 + "(3)" + $3 + "(4)" + $4;
});
return "(1)" + $1 + "(2)" + $2 + "(3)" + $3 + "(4)" + $4;
});
【結果】(1)456(2)×(3)123(4)123×456
$0、$1などを使って置換後の文字列を表現しますが、$0や$1に何がセットされるかはfunctionの引数の場所によってきまるだけで、$nが何かは関係ないようです。
replace(/(☆)(★)(◆)/, function (全体, ☆, ★, ◆) {
return 戻り値;
});
return 戻り値;
});
「全体」は使わないことがあるのですが、必然的に取得されてしまうようです。となると、例1のような書き方が分かりやすいかもしれません。この場合、PHPのpreg_replaceに似た動きをします。
[ 2009年4月23日 | カテゴリー: JavaScript | タグ: tips , 置換 ]
« 放置されたTODO | iPhoneでPicasaWebの画像を保存する方法 »
コメントを残す