- ベストアンサー
数値でなく文字列として認識してしまいます
fname="1.htm"; //(1) fname=fname.replace(/\.htm/,''); //(2)「1.htm」から「.htm」を取り除き nexturl=fname+1; //(3)これに「1」を足すと nexturlは2でなく11になってしまいます。 具体的には、例えば1.htm 2.htm 3.htm~99.htmといった名のページがある場合に、1.htmから2.htm、2.htmから3.htmといったように順番に自動的にリンクさせたいと考えております。そこで、それぞれのリンク部分に以下のように記述してみたのですが、上手く動作しませんでした。 //(1) myUrl=location.href; //現在のページのURLを調べ n = 6; fname=myUrl.substr(myUrl.length-n,n); //後から6文字を取り出し //(2) fname=fname.replace(/\.htm/,''); //「.htm」を取り除き fname=fname.replace(/\//,''); //1桁の数字のページ名の時には一番最初につく「/」を取り除き //(3) nexturl=fname+1; //1を足し nexturl=nexturl+".htm"; //これに「.htm」を再度付け加え location.href = nexturl; //次のページへ進む (2)の部分でfname=fname.match(/\d*/im);などと記述すれば数値が取得できるかと試したりもしたのですが、成功しませんでした。申し訳ありませんが、間違っている部分をご指摘いただけると大変助かります。JAVAスクリプト初心者ですが、よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
純粋に文字列を数値に変換するには、例えば nexturl = new Number(fname) + 1; あるいは nexturl = parseInt(fname) + 1; のようにします。 でも、これより簡単な方法があります。 + は文字列の連結と数値の足し算の二つの用途がありますが、- には数値の引き算の用途しかありません。そこで、文字列を引き算させることで、強制的に文字列を数値に変換できます。 具体的には、 nexturl = fname + 1; を nexturl = (fname - 0) + 1; のようにしてみてください。 (実際には、(fname - 0) の括弧は不要です。)
その他の回答 (2)
- me_no_car
- ベストアンサー率24% (22/90)
文字列を数値に変換する部分については、#2の方が詳しく説明しているので 必要ないと思います。実際にはparseIntを使っている人が多いと思います。 >(2)の部分でfname=fname.match(/\d*/im); この部分ですが、単純に正規表現が間違ってます。 \d* でなく \d+が正しいです。 これを利用すると myUrl = location.href; num = myUrl.match( /\d+/i ); nexturl = myUrl.replace( /\d+/ , ++num ); ともっと簡単になります。
お礼
ありがとうございます。スマートに記述する方法を具体的にご教授いただき、とても感謝しております。大変勉強になりました。
- dai-cha-n
- ベストアンサー率27% (12/43)
nexturl=parseInt(fname)+1; としてみていただけますか?
お礼
ありがとうございます。ご教授いただきましたように修正したら動作しました。
お礼
ありがとうございます。「-」を利用することで、数値にする方法があったんですか。とても勉強になりました。本当にありがとうございました。