1. 指定参数名称,返回该参数的值 或者 空字符串
2. 不指定参数名称,返回全部的参数对象 或者 {}
3. 如果存在多个同名参数,则返回数组
4. 不支持URLSearchParams方法
http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe key
[1, 2, 3]
function getUrlParam(sUrl, sKey) { var paramsN = sUrl.split("?")[1];//取出url后的字符串 var params = paramsN.split("#")[0];//剔除字符串#后的杂质 var param = params.split("&");//将字符串分割为键值对为一项的数组 var arr = []; if(sKey){//如果有参数 for(var i = 0;i<param.length;i++){//遍历键值对数组 var keyV = param[i].split("=");//分开键和值 if(keyV[0] === sKey){//如果有和传入的参数一样的键,则将其值插入到空数组中 arr.push(keyV[1]); } } if(arr.length === 0){//如果数组仍为空,则证明没有传入的参数的值 return ""; }else if(arr.length > 1){//有多个值 return arr; }else{//只有一个值 return arr[0]; } }else{//没有传入参数,返回对象 var obj = {}; for(var i = 0;i<param.length;i++){//遍历 var keyV = param[i].split("=");//分开键和值 if(obj[keyV[0]]){//如果对象中有该属性 obj[keyV[0]].push(keyV[1])//插入该属性中的数组中 }else{ obj[keyV[0]] = [keyV[1]]//如果没有则创建一个数组并且把值放入该数组中 } } for(var key in obj){//遍历插入数据的对象 if(obj[key].length === 1){//如果该对象的属性值的数组的长度为一 obj[key] = obj[key][0]//则让该对象的该属性值为数组里的值 } } return obj; } }
//参考大神的方法 function getUrlParam(sUrl, sKey) { var result,Oparam = {}; sUrl.replace(/[\?|&]?(\w+)=(\w+)/g,function($0,$1,$2){ Oparam[$1] === void 0 ? Oparam[$1]=$2 : Oparam[$1]=[].concat(Oparam[$1],$2); }); sKey === void 0||sKey==='' ? result=Oparam : result=Oparam[sKey]||''; return result; } //不用正则表达式的方法 function getUrlParam(sUrl, sKey) { var psArr = /\?/.test(sUrl) ? sUrl.split('?')[1].split('#')[0].split('&') : []; var result,Oparam = {}; for(var i=0;i<psArr.length;i++){ var pA = psArr[i].split('='); Oparam[pA[0]] === void 0 ? Oparam[pA[0]]=pA[1] : Oparam[pA[0]]=[].concat(Oparam[pA[0]],pA[1]); } sKey === void 0||sKey==='' ? result=Oparam : result=Oparam[sKey]||''; return result; }
function getUrlParam(sUrl, sKey) { var resObj = {}; var reg = /(\w+)=(\w+)/g; while (reg.exec(sUrl)) { resObj[RegExp.$1] ? resObj[RegExp.$1] = [].concat(resObj[RegExp.$1], RegExp.$2) : resObj[RegExp.$1] = RegExp.$2; } if (sKey) { return (resObj[sKey] ? resObj[sKey] : ''); } return resObj; }有点坑啊,不能用ES6语法,用了let结果怎么也不通过,调试了接近20分钟。。。醉。。。
function getUrlParam(_url, name) { let us=_url.split('?')[1].split('&') //指定参数 if(name){ let arr=[] if(us.filter(item=>item.split('=')[0]==name).length>1){ us.map(item=>{ let str=item.split('=') if(str[0]==name){ arr.push(str[1]) } }) return arr }else{ let _name = name.replace(/(?=[\\^$*+?.():|{}])/, '\\') let reg = new RegExp('(?:[?&]|^)' + _name + '=([^?&#]*)', 'i') let match = _url.match(reg) return !match ? '' : match[1] } }else{ if(us.length<=0){ return {} }else{ let obj={} us.map(item=>{ let str=item.split('=') if(obj.hasOwnProperty(str[0])){ obj[str[0]].push(str[1]) }else{ obj[str[0]]=[str[1]] } }) return obj } } }
function getUrlParam(sUrl, sKey) { var paramsMap = {}; var path = sUrl.split('#', 1)[0]; path.replace(/(\w+)=([^&#]*)/g, function (item, key, value) { var prev = paramsMap[key]; if (undefined === prev) { paramsMap[key] = value; } else if (undefined === prev.push) { paramsMap[key] = [prev, value]; } else { paramsMap[key].push(value); } }); return undefined === sKey ? paramsMap : (paramsMap[sKey] || ''); }
// By ClayIdol function getUrlParam(sUrl, sKey) { var r = [] , s = null , i = 0; var regexp = new RegExp(/[?&]([\w]*)=([^&#]*)/g); while((s = regexp.exec(sUrl)) != null){ if(!r[s[1]])r[s[1]] = s[2]; else if(typeof(r[s[1]]) == 'object'){ r[s[1]].push(s[2]); }else{ r[s[1]] = [r[s[1]],s[2]]; } } if(sKey){ //有参数,返回参数值或空 if(r[sKey]){ return r[sKey]; }else{ return ''; } }else{ return r; } }
function getUrlParam(sUrl, sKey) { const s = sUrl.split('?')[1].split('#')[0].split('&') const map = {} s.forEach(item => { const [key, val] = item.split('=') if (map[key] === undefined) map[key] = val else if (typeof map[key] === 'string') map[key] = [map[key], val] else map[key].push(val) }) if (!sKey) return map return map[sKey] || '' }
function getUrlParam(sUrl, sKey) { //正则表达式匹配key=value var re = /(\w+)=(\w+)/g; var arr = sUrl.match(re); var item = {}; //判断有没有传参数 var key = sKey || false; var key1; //如果有相同的参数名,flag会变成true var flag = false; for (var i = 0; i < arr.length; i++) { //键 var item1 = arr[i].split('=')[0]; //值 var value = arr[i].split('=')[1]; //传入了key if (key) { if (item[item1]) { //进入这个里面说明有相同的参数 flag = true; key1 = item1; item[item1] += value; } else { item[item1] = value; } } //未传入key else { if (item[item1]) { //进入这个里面说明有相同的参数 flag = true; key1 = item1; item[item1]+=value; } else { item[item1] = value; } } } //当有key,且有相同的参数,且传入的key就是相同的参数时 if (key && flag && key == key1) { return item[key1].split(""); } //当有key,且有相同的参数,但传入的key不是相同的参数时 if (key && flag && key != key1) { return item[key]?item[key]:""; } //当没有key,且有相同的参数 if (!key && flag) { item[key1] = item[key1].split("") return item; } //当没有key的时候 if (!key && !flag) { return item?item:{}; } }
function getUrlParam(sUrl, sKey) { const regex = /[\?&](\w+)=(\w+)/g; let params = {}; sUrl.replace(regex, (a,k,v) => { if (params[k]) { let t = params[k]; params[k] = [].concat(t,v); } else { params[k] = v; } }); if (sKey) { return params[sKey] || ""; } else { return params; } }
function getUrlParam(sUrl, sKey) { // 判断传入的url是否合法 const isURL = /^(https?:\/\/)([0-9a-z.]+)(:[0-9]+)?([/0-9a-z.]+)?(\?[0-9a-z&=]+)?(#[0-9-a-z]+)?/i if (!isURL.test(sUrl)) return '' // URL没有参数的情况 if (sUrl.indexOf('?') === -1) return '' // 获取参数 let paramsString = sUrl.split('?').pop() let paramsArray = [] let result = {} // 判断是否有哈希 if (paramsString.indexOf('#') !== -1) { paramsString = paramsString.split('#').shift() // key=1&key=2&key=3&test=4 } paramsArray = paramsString.split('&') // ['key=1', 'key=2', 'key=3', 'key=4'] paramsArray.forEach((string) => { let [key, value] = string.split('=') if (result[key]) { if (!Array.isArray(result[key])) { result[key] = [result[key]] } result[key].push(value) } else { result[key] = value } }) // { key: [1,2,3,4] } if (sKey == undefined) return result return sKey in result ? result[sKey] : '' }
function getUrlParam(sUrl, sKey) { var param = { // "key":[1,2,3], // "test":3 }; var arr = sUrl ? sUrl.split('?'):[]; //实际中为了url防止没有?#的情况 arr = arr[1] ? arr[1].split('#'):[]; arr = arr[0] ? arr[0].split('&'):[]; arr.forEach(item=>{ var temp = item.split('='); var k = temp[0], v = temp[1]; var prev = param[k]; //前一个 //是否是第一个数据 if(!prev){ param[k] = v; // 第一个存字符串 }else if(prev instanceof Array){ //如果是第三个或更多的数据 param[k].push(v); }else{ //如果是第二个数据 param[k]=[prev, v]; } }); return sKey ? (param[sKey] || ''): param; }
function getUrlParam(sUrl, sKey) { let reg = /([^?&=]+)=([^?&=])/g let sKeys = sUrl.match(reg) let sKeyObjs = {} sKeys.forEach(item=>{ let key = item.split("=")[0] let value = item.split("=")[1] if(!sKeyObjs[key]){ sKeyObjs[key]=[] } sKeyObjs[key].push(value) }) if(sKey === undefined){ return sKeyObjs }else{ let sKeyValues = [] if(sKeyObjs[sKey]){ sKeyValues = sKeyObjs[sKey] } return sKeyValues.length===0?"":sKeyValues.length>1?sKeyValues:sKeyValues[0] } }
/([^?&=]+)=([^?&=])/g然后进行数组和对象操作就行了
function getUrlParam(sUrl, sKey) { var start = sUrl.indexOf("?"); if (start == -1) return null; var res = sUrl.substring(start + 1); var ressplit = res.split("&"); var newarr = res.split("&").map(function(e) { var obj = {}; var sp1 = e.split("=")[0]; var sp2 = e.split("=")[1]; obj[sp1] = sp2; return obj; }); if (!sKey) return newarr; var newarr = newarr .filter(function(e) { return e["" + sKey + ""] != undefined; }) .map(function(s) { return parseInt(s[sKey]) || s[sKey]; }); return newarr.length > 1 ? newarr : newarr.join(""); }case75 不知道错哪了,正则不怎么了解方法比较呆板 ,不过想知道错哪了~~~!!!
function getUrlParam(sUrl, sKey) { let paramsObj = {}; sUrl.replace(/(?:\?|\&)(\w+)=(\w+)/g, (str, a, b) => { paramsObj[a] = (typeof paramsObj[a] == 'undefined' ? b : [].concat(paramsObj[a], b)); }); if(typeof sKey != 'undefined' && sKey != '' && sKey != null) { return paramsObj[sKey] || ''; } return paramsObj; }