Regular Expression在Javscript下的兩種作法

今天要幫朋友做一個解析 javascript 字串的範例, 其實硬 parse 也是很簡單, 但還是想用更好的方法來進行, 於是利用了 javascript 的 Regular Expression 來做 parse 的行為.

在 javascript 中, 使用 Regular Expression 的方式有兩種, 一種是利用 new RegExp , 一種是直接用 perl 的那種語法 /xxxxx/ 的方式, 我們來看看怎麼做吧:

題目是將網址列中的某一參數取出來, 例如 param 這個參數,
http://host/j.htm?a=1&param=data&b=2
其中的 param 參數的值為 data, 利用 Regular Expression 的取出方式如下:

var re = new RegExp("param=([a-z]+)");
var m = re.exec(window.location);
if(m) alert(m[1]);

利用了比對字串 param=([a-z]+) 來將 param 的參數值取出, 其中的 m 內容將會是 [0] 為整個 Regular Expression 的字串, [1] 會是第一個取出的值, 若有多個比對的 () 小括號, 就放到 [2], [3]… 以此類推.

這樣的執行結果就會取出 “data” 這個值.

我們再看另一種寫法(perl like):

var re = /param=([a-z]+)/;
var m = re.exec(window.location);
if(m) alert(m[1]);

一樣可以將 “data” 的這個值取出, 只是產生 Regulare Expression 的方式不同, 測試的網址在:
http://sample.diary.tw/10/j.htm?a=123&param=data&b=456

可以自行將 param=data 改為其他內容, 就可以測試囉. 另外多參數比對將之後再寫, 全域比對則是使用 g 參數, 兩者分別如下:

var re = new RegExp("param=([a-z]+)", "g");
var re = /param=([a-z]+)/g;

之後再用多次 re.exec 進行比對, 就可以順利取出囉!

參考資料:
http://www.regular-expressions.info/javascriptexample.html
http://phi.sinica.edu.tw/aspac/reports/94/94019/
http://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F

JAVA內的regulare expression:
http://www.javabeat.net/articles/2007/10/regular-expressions-in-java/

發佈留言

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