- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:書き換えがうまくいかない)
スクリプトの書き換えについて
このQ&Aのポイント
- スクリプトの書き換えがうまくいかない問題について相談です。
- スクリプトの一部を書き換えたいが、正しく表示されないという問題が発生しています。
- 正しく書き換えるためには、replaceメソッドの第2引数を文字列リテラルにする必要があるのかどうか、アドバイスをいただきたいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
以下のコードでは、replaceの第二引数に、functionの実行結果ではなく、実体を渡してしまっています。 str = str.replace(/^(.+?)回(以下を繰り返す)?$/, function(times) { newName(); return "for ("+name+"=0; "+name+"<"+times+"; "+name+"++) {" }); また、上記コードは以下のように置き換える事も出来ます。 var v = function(times) { newName(); return "for ("+name+"=0; "+name+"<"+times+"; "+name+"++) {" } str = str.replace(/^(.+?)回(以下を繰り返す)?$/, v); こうなると判りやすいのですが、本来replaceに渡すべき値は、functionの実行結果なので、以下のように修正すると、正常に動作します。 var v = function(times) { newName(); return "for ("+name+"=0; "+name+"<"+times+"; "+name+"++) {" } str = str.replace(/^(.+?)回(以下を繰り返す)?$/, v(10)); ちなみに、functionの実体を文字列に変換すると、functionの内容がそのまま渡されてしまいます。 alert(v);でどんな値がreplaceに渡ってしまっているか、内容を確認してみると良いかもしれません。
お礼
なるほど!うまくいきました。 ありがとうございます。