// 地址栏传参
function getLocation() {
// 获取地址栏参数
var str = location.search;
// var str = "?name='zs'&age=18&sex='man'";
// 解码
str = decodeURI(str);
// 切割去除?[slice切割字符串]
str = str.slice(1);
// 将字符串分割为数组【split()】
var arr = str.split("&");
var obj = {};
// 遍历数组获取键值
arr.forEach(function(v, i) {
var key = v.split("=")[0];
var value = v.split("=")[1];
obj[key] = value;
});
return obj;
}
console.log(getLocation());
function getLocation(k) {
// 获取地址栏参数
var str = location.search;
// 解码
str = decodeURI(str);
// 切割去除?[slice切割字符串]
str = str.slice(1);
// 将字符串分割为数组【split()】
var arr = str.split("&");
var obj = {};
// 遍历数组获取键值
arr.forEach(function(v, i) {
var key = v.split("=")[0];
var value = v.split("=")[1];
obj[key] = value;
});
return obj[k];
}
console.log(getLocation("name"));
// 将url的查询参数解析成字典对象
// 因为url允许用户随意输入,如果用拆字符的方式,有任何一处没有考虑到容错,就会导致整个js都报错。而正则就没有这个问题,他只匹配出正确的配对,非法的全部过滤掉,简单,方便。
function getQueryObject(url) {
url = url == null ? window.location.href : url;
// substring(start,end)截取字符串,取不到end,所以+1
var search = url.substring(url.indexOf("?") + 1);
// console.log(typeof(search));
// console.log(search);
var obj = {};
// 前后的斜杠/是正则表达式的分隔符,最后的g表示全局匹配,匹配到第一个之后不会停下来,会继续匹配,
// ():标记一个子表达式的开始与结束位置
// [:标记一个中括号表达式的开始。要匹配 [,请使用 [。
// [^]表示字符类取反,比如[^abc]匹配的就是不是a和b和c的单个字符,[^?&=]匹配不是^和?和=的单个字符.
// 字符类[]后面的+和*表示量词:
// + 等价于 {1,} 重复1次或多次
// * 等价于 {0,} 重复0次或多次
var reg = /([^?&=]+)=([^?&=]*)/g;
// 替换:replace(需要替换,替换值)
/*第二个参数可传入函数,会对每个匹配到的字符串'rs'做一次处理,然后你可以将结果return 出来*/
search.replace(reg, function(rs, $1, $2) {
console.log($1);
console.log($2);
// 解码转为中文
// decodeURIComponent() 函数可对 encodeURIComponent() 函数编码的 URI 进行解码。
var name = decodeURIComponent($1);
var val = decodeURIComponent($2);
// String(s);
// 参数 s 是要存储在 String 对象中或转换成原始字符串的值。
// console.log(name);
// console.log(val);
val = String(val);
obj[name] = val;
console.log(rs);
// obj[decodeURIComponent($1)]=decodeURIComponent($2)
return rs;
});
return obj;
}
console.log(getQueryObject());
// "http://www.cnblogs.com/leee/p/4456840.html?name=ls&age=28&sex=man"
// Object {name: "1", dd: "ddd**"}
// 正则解析;
var reg = /([^?&=]+)=([^?&=]*)/g;
var str = "foo=bar&lang=js";
var reg = /[^?&=]{1,}=[^?&=]{0,}/;
console.log(str.match(reg)); //输出 ["foo=bar"]
var str = "foo=bar&lang=js";
var reg = /[^?&=]{1,}=[^?&=]{0,}/g;
console.log(str.match(reg)); //输出 ["foo=bar", "lang=js"]
var str = "foo=bar&lang=js";
var reg = /([^?&=]{1,})=([^?&=]{0,})/;
console.log(str.match(reg)); //输出 ["foo=bar", "foo", "bar"]