正则表达式 - JavaScript获取URL参数的正则的区别?
PHPz
PHPz 2017-04-11 11:14:03
[JavaScript讨论组]

下面是两个获取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;
};

谢谢

PHPz
PHPz

学习是最好的投资!

全部回复(1)
巴扎黑

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

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

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

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号