// 地址栏传参 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"]