哎,又是一道筆試題……都怪我太懶,不多思考。之前一直用別人的代碼來獲取url參數值,別人的代碼是用正則表達式來寫的,代碼如下:
1 function getURLParam(name) { 2 return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)', "ig").exec(location.search) || [, ""])[1].replace(/\+/g, '%20')) || null; 3 }
參數解釋:name指要獲取的參數名,字符串變量。
正則表達式解釋:
new RegExp('(?|&)' + name + '=([^&;]+?)(&|#|;|$)', "ig")的意思是:
①創建一個正則表達式,匹配以字符?或者&開始,中間含有=的,並以&或#或;或$結束的字符串。
②ig意思是忽略大小寫,進行字符串全局搜索。
exec方法為檢索字符串中的正則表達式的匹配,存在匹配字符串則返回一個數組(第0個元素為正則表達式匹配的字符串,1,2,3...等分別存儲正則表達式字串的匹配字符),不存在則返回null值。
這里取第一個子表達式(即:([^&;]+?))所匹配到的字符串,也就是我們想要的字串
exec方法學習:JavaScript exec() 方法
location.serach為url中?及其后邊的字串(包含?)。
筆試剛看到這道題時,腦子里都是悔恨啊,悔恨到居然把split函數給忘了!!雖然這樣寫很雞肋,但是還是能解決問題的!
用split寫的雞肋代碼:
1 function getUrlParam(name){ 2 var arr = decodeURIComponent(location.search.split('?')[1]).split('&'); 3 var request=[]; 4 var temp=[]; 5 for(var i = 0;i<arr.length;i++){ 6 temp = arr[i].split('='); 7 request[temp[0]] = temp[1]; 8 } 9 return request[name] || null; 10 }
代碼就不解釋了。就是用split不斷的切割切割...