- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:replaceが再帰的に実行されない)
replaceが再帰的に実行されない
このQ&Aのポイント
- ファイル名に使えない半角文字を、対応する全角文字に置き換えるコードを作成しましたが、replaceが再帰的に実行されず、文字列の置き換えがうまく行われません。
- replaceメソッドのパターンに配列の要素を指定することはできません。正規表現のパターンを文字列で指定する必要があります。
- 文字列の置き換えを再帰的に行うためには、正規表現のグローバルフラグ 'g' を付ける必要があります。
- みんなの回答 (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>
その他の回答 (1)
- twinhourse
- ベストアンサー率45% (5/11)
回答No.1
定かではありませんが、/RENAME[0][i]/gとやってしまうと、「RENAME0i」という文字自体を検索対象にしてしまうのではないでしょうか。変数とは見ていないような気がします。
お礼
ご回答ありがとうございます。 提示されたコードでうまく動きました。 このやり方だとエスケープが倍必要になるんですね。 良い勉強になりました。