日常代碼優化系列:(一)獲取url參數
阿新 • • 發佈:2018-09-19
分別是 對象 https 結果 font 被調用 undefined span repl
2. 不指定參數名稱,返回全部的參數對象 或者 {}
3. 如果存在多個同名參數,則返回數組
最近刷牛客網的時候,看到某大神寫的 獲取url參數 的簡潔寫法,正則用的那叫一個6,頓時心生敬佩,趕緊來學習膜拜一下~~
題目描述:獲取 url 中的參數
1. 指定參數名稱,返回該參數的值 或者 空字符串2. 不指定參數名稱,返回全部的參數對象 或者 {}
3. 如果存在多個同名參數,則返回數組
function getUrlParam(sUrl,sKey){ var result = {}; sUrl.replace(/\??(\w+)=(\w+)&?/g,function(a,k,v){ if(result[k] !== void 0){var t = result[k]; result[k] = [].concat(t,v); }else{ result[k] = v; } }); if(sKey === void 0){ return result; }else{ return result[sKey] || ‘‘; } }
1、getUrlParam 函數接收兩個參數,分別是 surl 和 指定的參數名稱(可能為空)。
2、聲明一個空的對象,用來存放字符串中的 參數名:參數值;
3、使用 string 的 replace 方法,需要註意的是,如果第一個參數是正則表達式,並且其為全局匹配模式,第二個參數為函數,那麽這個方法將被多次調用,每次匹配都會被調用,否則只在第一次會調用。
str.replace(regexp|substr, newSubStr|function) sUrl.replace(/\??(\w+)=(\w+)&?/g,function(a,k,v){...}) // 在surl中查找匹配 /\??(\w+)=(\w+)&?/g 的字符串 a,其中第一個(\w+)捕獲組的匹配項為 k;第二個(\w+)捕獲組的匹配項為 v。
以 ‘https://www.baidu.com/?Id=1&name=hqq&name=gb‘為例:
第一次匹配結果為:a=‘?Id=1&‘ , k=‘Id‘ , v=‘1‘
第二次匹配結果為:a=‘name=hqq&‘ , k=‘name‘ , v=‘hqq‘第三次匹配結果為:a=‘name=gb‘ , k=‘name‘ , v=‘gb‘
由於正則使用了全局匹配模式,所以每次匹配都會調用後面的匿名函數。
if(result[k] != void 0){ // 目的是判斷 result[k]是否為 undefined,不直接使用undefined的原因是,undefined 有可能會被修改,而 void 0 返回的值永遠都是 undefined var t = result[k]; // 將 result 中 key 為 k 的 值賦給 t result[k] = [].concat(t,v);// 如果參數名稱 k 已存在,將對應的參數值1,與傳入的參數值2合並成一個數組,返回給result[k]即可
}
日常代碼優化系列:(一)獲取url參數