2010年9月16日木曜日

【JavaScript】正規表現の微妙な罠~左から読みこみ

先日から微妙にPHPの学習を始めておりまして、
その辺りもおいおいブログにあげていければと考えてはおりますが、
今日はそんなPHPの話ではなく、正規表現 with javascriptです。

PHPの基礎やる上で、
毎度毎度HTMLを書くのは面倒臭いな、と思ったので
当然ながらプレートを用意したわけです。誰だってそうする。俺だってそうする。

エディターはTeraPadを使っているのでツール登録して呼び出し出来るように。

で、練習のために名前をつけて保存、ファイル名はpracticeXX(数字).php、
そしてwebサーバにアップして開いて…。

と、繰り返していた中で、
いちいちアドレスバーの数字を書き換えて表示するのも面倒になってきました。

あ、テンプレートへ次のファイルへのリンク埋め込んでおけばいいんだ。
しかしテンプレートを貼りつけ後に数字書き換えるのも手間だよな。

とか思い、javascriptで何とかしてみることにしました。


var nowLoc = location.href;
//locationオブジェクトのhrefプロパティで
//現在のURL取得

nowLoc.search(/\/[\w]+(\d+)\.[\w]{3,4}$/);
var pageNum = RegExp.$1;
//最後のスラッシュから末尾までの中から
//.直前の数字を取得

pageNum = Number(pageNum)+1;
//念のため数値化して1を足す

function toNext(){

location.href="practice"+pageNum+".php";
}
//リンクするtoNext関数を作成する

あとはHTML部に


てな感じで。

これで1~10までは上手くいったのですが、
どうも10から11ページで失敗してしまう。

調べてみると、正規表現で取得した数値が0になってしまってました。

気付いてみればあら簡単。
どうも末尾から、末尾からっていう意識に縛られていたんですが、
スクリプトは上から下、そして左から右の順に読み込まれるものなのです。
いわゆる先行順ですね。

で、正規表現部分を書き換え。

nowLoc.match(/\/[a-zA-Z]+(\d+)\.[\w]{3,4}$/);

がっかりするほど初歩的なミスでしたね。

0 件のコメント:

コメントを投稿