- 指定参数名称,返回该参数的值 或者 空字符串
- 不指定参数名称,返回全部的参数对象 或者 {}
- 如果存在多个同名参数,则返回数组
function getUrlParam(sUrl, sKey) {
result = {};//用来存储参数键值对
sUrl.replace(/\??(\w+)=(\w+)&?/g, function(str, key, value) {
if (result[key] !== undefined) {//键值已定义
var t = result[key];
result[key] = [].concat(t, value);//把新元素拼接成一个数组
} else {//键值未定义
result[key] = value;//直接为对象创建这个新属性
}
});
if (sKey === undefined) {//函数第二个参数未传入时,返回整个对象
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。
容易忽略的点(易报错):
- replace是一个回调函数,可以接受匹配到的整个字符串和多个子串为参数;
- 回调函数用箭头函数写的话,在牛客网的环境下会报错
- 最后返回空字符串的写法“”,不能加空格