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;
};

谢谢

阅读 7.2k
1 个回答

先总结说,这两个函数并没有太大差别,但我觉得第一个好一点。

'(\\?|&)' + key + '=(.*?)(&|$)',这句的意思是说,以?&开头,中间是key=xxxxxx可以为空字符串,最后以&或字符串末位结尾。

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题