比如:href="http://www.mofier.com?name=abc&sex=1&age=12";
想提取出name,abc,sex,1,age,12。最好能直接提取而不需要进一步分解操作
现在我只写出:
var reg = /[\?|&](.+?)={1,1}(.+?)[&]/ig;
var match = reg.exec(href);
只能提取出第一个参数对:name,abc,其他的参数对无法取到。
请高手帮我啊,我已经没分了,最多20分
想提取出name,abc,sex,1,age,12。最好能直接提取而不需要进一步分解操作
现在我只写出:
var reg = /[\?|&](.+?)={1,1}(.+?)[&]/ig;
var match = reg.exec(href);
只能提取出第一个参数对:name,abc,其他的参数对无法取到。
请高手帮我啊,我已经没分了,最多20分
var param=url.substring(url.indexOf("?")+1)
.split("&");
var temp,map={};
for(var i=0,len=param.length;i<len;i++){
temp=param[i].split("=");
map[temp[0]]=temp[1];
}alert(map.name);
str="http://www.mofier.com?name=abc&sex=1&age=12";
alert(str.substring(str.indexOf('?') + 1).split('&').join('=').split('='));
1楼的方法会使得效率低于用正则表达式。
1.用url.indexOf方法,这是一次字符串操作
2.用substring方法,这是一次字符串操作
3.循环里面,有个split方法,这是n此字符串操作(n是数组单元的个数)
以上总共的字符串操作有2+n。我封装这个是作为我的js操作的底层,很讲究效率,我现在用的正则算法是只有1次字符串操作,就能把所有的参数对提取完毕。
var getArgs=function() {
var params=document.location.search.substr(1),reg=/(?:^|&)(.*?)=(.*?)(?:&|$)/g,temp,args={};
while((temp=reg.exec(params))!=null) {
reg.lastIndex-=1;
args[temp[1]]=temp[2];
}
return args;
};
alert(getArgs().name);
//测试链接:<a href="?name=abc&sex=1&age=12">ttttt</a>
var searchStr = location.search;
var svalue = searchStr.match(new RegExp("[\?\&]" + item + "=([^\&]*)(\&?)", "i"));
return svalue ? svalue[1] : svalue;
}
<script>
(function(){
var url="http://www.mofier.com?name=abc&sex=1&age=12&gender=male&height=&weight=30";
var search=url.substring(url.indexOf("?")+1);
var reg=/(.+?)=(.*?)(&|$)/g;
var params={};
while(reg.exec(search)){
params[RegExp.$1]=RegExp.$2||"";
}
for(var i in params){
alert(i+":"+params[i]);
}
})();
</script>
{
var url_params = /(\w+(?=\=))|((\w+)(?=\&|\s))/g;
return url.match(url_params+' ');
}
alert(query_params('http://www.mofier.com?name=abc&sex=1&age=12').join(','));
$var=~m/((?<=[\?&]).*?(?=&)|(?<=&).*)/g
?<=[\?&] #肯定逆序环视,左边存在&或者?则匹配成功。
.*? #忽略有限,匹配任意字符。
?=& #肯定顺序环视,右边存在&字符时匹配成功。上面能匹配完除最后一组数据之外的所有数据。因为最后一组数据后面没有字符&所以另写?<=& #肯定逆序环视,左边存在&则匹配成功。
.* #匹配优先,匹配任意字符。这里利用两个多选组进行完全匹配,首先是匹配第一个选项,这样可以匹配除最后一组数据之外的所有数据,第二个选项可以匹配最后一组数据。