下面是两个获取url参数的函数
对于正则比较菜
仅就正则而言,有啥区别吗,上面一个正则会有遗漏的地方吗
var urlParams = function (key) {
var ret = location.search.match(new RegExp('(\\?|&)' + key + '=(.*?)(&|$)'))
return ret && decodeURIComponent(ret[2])
}
var $_GET=function (name){
var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg);
if(r!=null)return unescape(r[2]); return null;
};
谢谢
先总结说,这两个函数并没有太大差别,但我觉得第一个好一点。
'(\\?|&)' + key + '=(.*?)(&|$)'
,这句的意思是说,以?
或&
开头,中间是key=xxx
,xxx
可以为空字符串,最后以&
或字符串末位结尾。(^|&)"+ name +"=([^&]*)(&|$)
,这句的意思是说,以字符串首位或&
开头,中间是name=xxx
,xxx
是除&
以外的任何字符串,也可以为空串,最后以&
或字符串末位结尾。因为下面用了
.substr(1)
,默认跳过查询字符串的首字符?
。就正则表达式而言,这两者差别并不大,最终取得结果都是正确的,但
unescape
函数是不建议使用的,ECMAScript v3 已从标准中删除了unescape()
函数,并反对使用它,因此应该用decodeURI()
和decodeURIComponent()
取而代之