前言:找了很长时间没有找到如何去拿正则的手法去解决这个问题.
问题描述:
有这样一个 URL:http://item.taobao.com/item.htm?a=1&b=2&c=&d=xxx&e,请写一段 JS 程序提取 URL 中的各个 GET 参数(参数名和参数个数不确定),将其按
key-value 形式返回到一个 json 结构中,如{a:’1′, b:’2′, c:”, d:’
xxx’, e:undefined}。
字符串截取
分析:
地址中是有一些特定值的存在的,键值对的前面是?,键值对之间又是以&分开的,键与值之间又有=分隔
原理:
利用字符串的切割,字符串向数组的转换,最后用对象来保存数据.
var url = "http://item.taobao.com/item.htm?a=1&b=2&c=&d=xxx&e";
function getname (url) {
if(!/\?/.test(url)) {
// 判断是否有?存在,即是判定键值对是否存在,
// 在正则中?有特殊含义代表出现0或1次,所以用"\"进行转义,将其转为普通字符
return null;
}
var index = url.indexOf("?") + 1;
var str = url.substr(index);
var arr = str.split("&");
// var arr = url.split("?")[1].split("&");
//上面的三句实现的效果可以并为一句
var o = {};
for(var i = 0; i < arr.length; i++) {
// 之所以再次使用split方法是因为数组元素还是字符串,
// 数组本身是没有split语法的
var newarr = arr[i].split("=");
o[newarr[0]] = newarr[1];
}
return o;
}
console.log(getname(url));