通过正则格式化url查询字符串实现代码


Posted in Javascript onDecember 28, 2012

看到项目里通过js数组split方法格式化查询字符串的,突发奇想为什么不能用正则呢,性能如何?于是便有了如下代码:

var url='www.baidu.com?a=123&b=456&c=789&e=dfsdfsdfsdfsdfsdfsdf&f=46545454545454785&g=e23232dsfvdfvdf'; 
/** 
* 格式化查询字符串(正则实现) 
* @param url url地址 
* @return {Object} 格式化的json对象 
*/ 
function formatUrl(url){ 
var reg=/(?:[?&]+)([^&]+)=([^&]+)/g; 
var data={}; 
function fn(str,pro,value){ 
data[decodeURIComponent(pro)]=decodeURIComponent(value); 
} 
url.replace(reg,fn); 
return data; 
} 
/** 
* 格式化查询字符串(数组实现) 
* @param url url地址 
* @return {Object} 格式化的json对象 
*/ 
function formatUrl2(url){ 
url=url.replace(/.*\?/,''); 
var args={}, 
items=url.length?url.split("&"):[] 
,item=null 
,i=0 
,len=items.length; 
for(i=0;i<items.length;i++){ 
item=items[i].split("="); 
args[decodeURIComponent(item[0])]=decodeURIComponent(item[1]); 
} 
return args; 
} 
var startTime=new Date(); 
for(var i=0;i<1000000;i++){ 
formatUrl2(url); 
} 
console.log('formatUrl2',(new Date()-startTime)); //formatUrl2 12138 
startTime=new Date(); 
for(var i=0;i<1000000;i++){ 
formatUrl(url); 
} 
console.log('formatUrl',(new Date()-startTime)); //formatUrl 12537

测试浏览器是chrme 25;正则实现的函数居然比数组实现的函数要慢(泪奔....)。不过还好,在重复执行一百万次的情况下只慢0.4秒
Javascript 相关文章推荐
jQuery 解析xml文件
Aug 09 Javascript
jQuery实现的立体文字渐变效果
May 17 Javascript
utf-8编码引起js输出中文乱码的解决办法
Jun 23 Javascript
jquery 使用点滴函数代码
May 20 Javascript
js面向对象 多种创建对象方法小结
May 21 Javascript
js获取 type=radio 值的方法
May 09 Javascript
基于Javascript实现二级联动菜单效果
Mar 04 Javascript
浅谈JavaScript的内置对象和浏览器对象
Jun 03 Javascript
javascript中获取元素标签中间的内容的实现方法
Oct 08 Javascript
使用vue和datatables进行表格的服务器端分页实例代码
Jun 07 Javascript
package.json文件配置详解
Jun 15 Javascript
vue+Element实现搜索关键字高亮功能
May 28 Javascript
Js数组的操作push,pop,shift,unshift等方法详细介绍
Dec 28 #Javascript
载入jQuery库的最佳方法详细说明及实现代码
Dec 28 #Javascript
一个背景云变换js特效 鼠标移动背景云变化
Dec 28 #Javascript
javascript 实现简单的table排序及table操作练习
Dec 28 #Javascript
jQuery 选择器项目实例分析及实现代码
Dec 28 #Javascript
jQuery插件-jRating评分插件源码分析及使用方法
Dec 28 #Javascript
JS声明变量背后的编译原理剖析
Dec 28 #Javascript
You might like
PHP调用Twitter的RSS的实现代码
2010/03/10 PHP
解析php中如何调用用户自定义函数
2013/08/06 PHP
thinkPHP商城公告功能开发问题分析
2016/12/01 PHP
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
javascript编程起步(第四课)
2007/02/27 Javascript
javascript将相对路径转绝对路径示例
2014/03/14 Javascript
Area 区域实现post提交数据的js写法
2014/04/22 Javascript
IE下通过a实现location.href 获取referer的值
2014/09/04 Javascript
JavaScript基础知识之方法汇总结
2016/01/24 Javascript
基于JavaScript实现弹出框效果
2016/02/19 Javascript
javascript HTML5文件上传FileReader API
2020/03/27 Javascript
jQuery EasyUI Accordion可伸缩面板组件使用详解
2017/02/28 Javascript
老生常谈jquery中detach()和remove()的区别
2017/03/02 Javascript
详解使用angular-cli发布i18n多国语言Angular应用
2017/05/20 Javascript
NodeJS简单实现WebSocket功能示例
2018/02/10 NodeJs
深入理解Vue 组件之间传值
2018/08/16 Javascript
跨域解决之JSONP和CORS的详细介绍
2018/11/21 Javascript
详解一次Vue低版本安卓白屏问题的解决过程
2019/05/30 Javascript
js实现表单项的全选、反选及删除操作示例
2020/06/05 Javascript
Python类属性的延迟计算
2016/10/22 Python
你眼中的Python大牛 应该都有这份书单
2017/10/31 Python
Python实现App自动签到领取积分功能
2018/09/29 Python
解决Python print输出不换行没空格的问题
2018/11/14 Python
Windows下Python3.6安装第三方模块的方法
2018/11/22 Python
Python warning警告出现的原因及忽略方法
2020/01/31 Python
Python爬虫爬取电影票房数据及图表展示操作示例
2020/03/27 Python
解决Keras自带数据集与预训练model下载太慢问题
2020/06/12 Python
餐饮主管岗位职责
2013/12/10 职场文书
毕业生就业协议书
2014/04/11 职场文书
人事专员岗位职责说明书
2014/07/30 职场文书
党员民主评议总结
2014/10/20 职场文书
营运督导岗位职责
2015/04/10 职场文书
2016年三八红旗手先进事迹材料
2016/02/26 职场文书
读《方与圆》有感:交友方圆有度
2020/01/14 职场文书
写好Python代码的几条重要技巧
2021/05/21 Python
Java新手教程之ArrayList的基本使用
2021/06/20 Java/Android