首页 > JavaScript获取URL参数的正则的区别?

JavaScript获取URL参数的正则的区别?

下面是两个获取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=xxxxxx可以为空字符串,最后以&或字符串末位结尾。

(^|&)"+ name +"=([^&]*)(&|$),这句的意思是说,以字符串首位或&开头,中间是name=xxxxxx是除&以外的任何字符串,也可以为空串,最后以&或字符串末位结尾。
因为下面用了.substr(1),默认跳过查询字符串的首字符?

就正则表达式而言,这两者差别并不大,最终取得结果都是正确的,但unescape函数是不建议使用的,ECMAScript v3 已从标准中删除了 unescape() 函数,并反对使用它,因此应该用 decodeURI()decodeURIComponent() 取而代之

【热门文章】
【热门文章】