今天要幫朋友做一個解析 javascript 字串的範例, 其實硬 parse 也是很簡單, 但還是想用更好的方法來進行, 於是利用了 javascript 的 Regular Expression 來做 parse 的行為.
在 javascript 中, 使用 Regular Expression 的方式有兩種, 一種是利用 new RegExp , 一種是直接用 perl 的那種語法 /xxxxx/ 的方式, 我們來看看怎麼做吧:
題目是將網址列中的某一參數取出來, 例如 param 這個參數,
http://host/j.htm?a=1¶m=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¶m=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/