• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:replaceが再帰的に実行されない)

replaceが再帰的に実行されない

このQ&Aのポイント
  • ファイル名に使えない半角文字を、対応する全角文字に置き換えるコードを作成しましたが、replaceが再帰的に実行されず、文字列の置き換えがうまく行われません。
  • replaceメソッドのパターンに配列の要素を指定することはできません。正規表現のパターンを文字列で指定する必要があります。
  • 文字列の置き換えを再帰的に行うためには、正規表現のグローバルフラグ 'g' を付ける必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

なんか効率的じゃない気がしますが、このフローだとヒットさせる 予約された検索語のエスケープがきちんとできてないのでは? <script> var target = '\\/:*\"<>|\\/:*\"?<>|'; var RENAME = [   [ "\\\\", "\\/", ":", "\\*", "\\?", "\\\"", "<", ">", "\\|" ],   [ "¥", "/", ":", "*", "?", "”", "<", ">", "|" ] ]; for (var i=0;i<RENAME[0].length;i++){  target = target.replace(RegExp(RENAME[0][i],"g"), RENAME[1][i]); } document.write(target); </script>

taku17
質問者

お礼

ご回答ありがとうございます。 提示されたコードでうまく動きました。 このやり方だとエスケープが倍必要になるんですね。 良い勉強になりました。

その他の回答 (1)

回答No.1

定かではありませんが、/RENAME[0][i]/gとやってしまうと、「RENAME0i」という文字自体を検索対象にしてしまうのではないでしょうか。変数とは見ていないような気がします。