正则表达式 - JavaScript获取URL参数的正则的区别?

查看:112
本文介绍了正则表达式 - 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() 取而代之

这篇关于正则表达式 - JavaScript获取URL参数的正则的区别?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆