JS的正則表示式
前景提示:處理一串URL,取出URL中指定引數的值。程式碼如下
1var url="http://www.baidu.com?ajbs=75000000096128&id=1212"; 2url=encodeURI(url); 3 4var reg = new RegExp('(\\?|&)' + 'ajbs' + '(=[^&]*)($|&)','i'); 5var r = url.match(reg); 6 7if (r != null) { 8alert('unescape:'+unescape(r[2])); 9}
line1:這是我們要處理的url
line4:這個部分就是正則表示式的匹配規則,重點要講。從整體來看,這裡新建了一個RegExp物件。
-
建構函式RegExp(str1,str2)
-- str1:正則表示式的規則
-- str2:修飾符
上面的正則表示式要拆開看 - '(\\?|&)' :表示字串出現"?"(因為?在正則表示式中是關鍵字,所以需要轉義)或者"&",但是兩者不會同時出現
- (=[^&]):表示"="號後面非"&"字元出現0次或者多次。"^"出現在"[]"中表示取反," "表示0次或者多次
-
($|&):和第一條一樣,字串出現"
"是強制結束的標誌
這個正則表示式的整體意思就是匹配字串中以?或者&開頭,中間是“ajbs=”,後面跟著“非&”字串,最後以“&”結尾或者無字元為止 。
line5:url.match(reg) ,匹配正則表示式,重點講。此函式匹配結果是一個數據,如果url中有reg描述的字串,則返回資料;如果沒有,則返回null。而資料,與reg的修飾符有著密切的關係。 - 修飾符為g時,全域性搜尋,返回的陣列中只存放匹配到的字串。
- 修飾符不為g時,返回的陣列中先存放匹配到的字串,之後一次存放所有匹配子字串。而所謂子字元傳,即上面reg中“()”中的內容就是子字串。
所以上面程式碼得到的
r的值為:?ajbs=75000000096128&,?,=75000000096128,&(以逗號分隔的陣列)
r[2]值為:75000000096128(即ajbs的值)