replaceが再帰的に実行されない
ファイル名に使えない半角文字を、対応する全角文字に置き換えるコードを作っています。問題自体は別の方法で解決済みですが、最初に想定した方法がうまくいかなかった理由が分からないので、納得する答えを得る為に質問させて頂きます。以下のようなコードを書きました。
var target = "\\/:*\"<>|\\/:*\"<>|";
var RENAME = [
[ "\\", "/", ":", "*", "?", "\"", "<", ">", "|" ],
[ "¥", "/", ":", "*", "?", "”", "<", ">", "|" ]
];
for (var i=0, l=RENAME[0].length; i<l; i++)
{
target = target.replace(/RENAME[0][i]/g, RENAME[1][i]);
}
alert(target);
変数target内には、ファイル名に使えない文字「\/:*?"<>|」を2回記述しています。この文字列がすべて全角文字に置き換わっていて欲しいのですが、うまくいきません。まず
target = target.replace(/RENAME[0][i]/g, RENAME[1][i]);
が次のようになっている場合
target = target.replace(RENAME[0][i], RENAME[1][i]);
これは本当に単純な1回のみの文字列置き換えなので、前半の文字のみ全角に置き換えられ、後半の文字はどれも半角のままです。結果は「¥/:*”<>|\/:*"<>|」でした。ですので、
target = target.replace(/RENAME[0][i]/g, RENAME[1][i]);
というように前後を/で囲み、オプションでgをつけることで置き換えが再帰的に行われ、後半の文字も全角に置き換わることを期待したのですが、今度は置き換えが全く行われず、変数target内の文字はすべて半角で「\/:*"<>|\/:*"<>|」のままでした。
この書き方にはどのような問題があるのでしょうか?
補足
この場合、URLをデータベースから引っ張ってきてるので、エスケープする関数などありましたら、教えていただければ助かります。