• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:[020-150]を020jpg 021jpg・・・と展開したい。)

[020-150]を020jpg 021jpg・・・と展開したい。

このQ&Aのポイント
  • [020-150]の020部分の桁数をしらべて。その桁数-Iの桁数=頭につける0の数
  • 正規表現を使用して、[020-150]の範囲を取得し、ループさせることで、[020.jpg, 021.jpg,..., 150.jpg]という一覧を表示できます。
  • 以下のスクリプトを使用することで、[020-150]を[020.jpg, 021.jpg,..., 150.jpg]と展開することができます。」

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

  • ベストアンサー
  • zzzzzz
  • ベストアンサー率61% (70/113)
回答No.1

数値を桁指定して文字列に変換する、という関数を作成すると良いと思います。 例えば、 function numberToString(num, fig) { var tmparray = new Array(fig); var str = num.toString(10); for (var i=str.length; i<fig; i++) { tmparray[i] = "0"; } return (tmparray.join("")+str); } のようにします。 これはnumが正の数であることを前提にしていますが、今回は問題ありません。 その上で、RegExp.$2とRegExp.$3が同じ桁数かどうかによって処理を分ければ良いことになります。従って、 function my1(str) { if (str.match(/^(.*)\[(\d+)\-(\d+)\](.*)$/) != null) { var win = window.open(); if (RegExp.$2.length == RegExp.$3.length) { var fig = RegExp.$2.length; for (var i=Number(RegExp.$2); i<=Number(RegExp.$3); i++) { win.document.write(RegExp.$1 + numberToString(i, fig) + RegExp.$4 + "<BR>\n"); } } else { for (var i=Number(RegExp.$2); i<=Number(RegExp.$3); i++) { win.document.write(RegExp.$1 + i + RegExp.$4 + "<BR>\n"); } } } else { alert("式が展開可能ではありません。"); } } とすればOKです。

norinori555
質問者

お礼

zzzzzz様  投稿してすぐ回答をいただきありがとうございました。 お答えを紙に書き出し今日一日読んでいました。 なるほど文字列にする方法がありましたね。それから関数を用いてリターンで返すという方法というのは、全く思いつきませんでした。 驚きの連続です。 ありがとうございました。 前回の質問は http://www.okweb.ne.jp/kotaeru.php3?q=247951 でした。