将
http: //www.a.com/admin/index.php#route=main/nav&user=tom&id=123/profile
后的参数转换成:
[
{"router":"main"},
{
"nav":"",
"user":"tom",
"id":"123"
},
{"profile":""}
]
除了循环变量有没有更简洁的方法
将
http: //www.a.com/admin/index.php#route=main/nav&user=tom&id=123/profile
后的参数转换成:
[
{"router":"main"},
{
"nav":"",
"user":"tom",
"id":"123"
},
{"profile":""}
]
除了循环变量有没有更简洁的方法
var url = location.search.substr(1);
param = {};
console.log(url);
url.replace(/([^?&]+)=([^?&]+)/g, function(s, v, k) {
param[v] = decodeURIComponent(k);
return k + '=' + v;
});
console.log(param);
var url = 'http: //www.a.com/admin/index.php?route=main/nav=&user=tom&id=123/profile',
result = [];
url.substring(url.indexOf('?') + 1)
.replace(/[^\/]+/g, function(objstr) {
var obj = {},
empty = false;
objstr.replace(/([^\/&=]+)(=([^\/&=]+)?)?/g, function(s, a, b, c) {
if(a && b && c){
obj[a] = c;
}else if(a && !c){
obj[a] = '';
}else{
empty = true;
}
});
if(!empty){
result.push(obj);
}
});
console.log(result);
我觉得用正则表达式将简单的问题搞复杂了。本来就一个很简单的字符串分解的工作,却要弄出一个很复杂的正则表达式,正则表达式看起来很反人类的说。1楼的同学用了太多jquery的函数。也不是我喜欢的。简单的工作就简单的解决即可。速度快无依赖。
可以试试下面的代码:
<script>
var url = 'http: //www.a.com/index.php?route=main&nav&user=tom&id=123&profile';
var querys = url
.substring(url.indexOf('?') + 1)
.split('&');
var result={};
for(var i=0;i<querys.length;i++){
var temp=querys[i].split('=');
if(temp.length<2){
result[temp[0]]='';
}else{
result[temp[0]]=temp[1];
}
}
console.log(result);
</script>
27 回答13.8k 阅读
8 回答3.5k 阅读✓ 已解决
6 回答1.3k 阅读✓ 已解决
5 回答5.3k 阅读✓ 已解决
6 回答1.1k 阅读
4 回答1.6k 阅读✓ 已解决
3 回答1.7k 阅读
坐等更好方案: