• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:書き換えがうまくいかない)

スクリプトの書き換えについて

このQ&Aのポイント
  • スクリプトの書き換えがうまくいかない問題について相談です。
  • スクリプトの一部を書き換えたいが、正しく表示されないという問題が発生しています。
  • 正しく書き換えるためには、replaceメソッドの第2引数を文字列リテラルにする必要があるのかどうか、アドバイスをいただきたいです。

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

  • ベストアンサー
  • t_wada
  • ベストアンサー率50% (3/6)
回答No.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に渡ってしまっているか、内容を確認してみると良いかもしれません。

KanjiTalk
質問者

お礼

なるほど!うまくいきました。 ありがとうございます。