Regular Expression查黃金門號

這個標題會不會太有趣了一點, 哈!

其實是要介紹 regulare expression 的量詞及參考語法, 我們假設要尋找黃金門號(其實也沒有那麼黃金啦), 例如: 0911213252 (0911213252) 這樣的 pattern, 如何利用 regular expression 來尋找呢? 我們這裡就會用到量詞及參考:

前方的 0911 為 4個數字, 所以直接用 [0-9]{4} , 這裡的 {4} 就代表著一定就是跳過4個數字
第一個不定關鍵字 ([0-9]) , 由於不寫個數, 就代表了一個數字, 而這裡用 ( ) 代表著一個比對的字元之後會用到
接下來就固定 2個數字, 所以用 [0-9]{2}
再接下來就是第一個參考囉, 也就是參考第 2點的關鍵字, 這裡用 \1 來代表

所以整個比對用字串就會成為: [0-9]{4}([0-9])[0-9]{2}\1[0-9]{2}

其中特別的地方就是量詞 {min, max} , 量詞若只給一個數字代表就是這麼多, 如{n} 代表 n個, 而給定min, max 則代表少min個, 最多max個, 如 {3,5} 代表3~5個, 若只給一邊, 就代表另一邊不限制, 如{4,} 代表至少 4個.

另一個特別的地, 就是參考, 而參考 \1, \2, …. 這樣的語句. 第一個參考的就會是第一個 match 的 ( ) 小括號內容, 所以就會是 match 上面的紅字 2 , 利用 javascript 來寫就會是這樣:

var aPhone = ["0911231241","0912312121","0912131129"];
function test()
{
 var re = /[0-9]{4}([0-9])[0-9]{2}\1[0-9]{2}/;   
 var m;
 for(i=0;i<aPhone.length;i++)
 {
  m = re.exec(aPhone[i]);
  if(m) alert(aPhone[i]);
 }
}

其中要特別注意的是若是利用 new RegExp 的語法, 若是直接將 pattern 傳入, 要注意反斜線這個 escape 字元, 所以要用兩個, 而用 / / 這種方式的就沒有這個問題囉!

經過這樣介紹, 對於更複雜的 regulare expression 是不是有更進一步的了解, 若有任何實作上的問題, 歡迎大家一起來討論囉!!

測試連結在此: http://sample.diary.tw/10/num.htm

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。