通过正则格式化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实现带排序功能的权限选择实例
May 18 Javascript
javascript+HTML5的Canvas实现Lab单车动画效果
Aug 07 Javascript
JavaScript判断DIV内容是否为空的方法
Jan 29 Javascript
jquery精度计算代码 jquery指定精确小数位
Feb 06 Javascript
node实现定时发送邮件的示例代码
Aug 26 Javascript
Angular js 实现添加用户、修改密码、敏感字、下拉菜单的综合操作方法
Oct 24 Javascript
vue初尝试--项目结构(推荐)
Jan 30 Javascript
Vue项目分环境打包的实现步骤
Apr 02 Javascript
JS canvas绘制五子棋的棋盘
May 28 Javascript
JavaScript内置对象之Array的使用小结
May 12 Javascript
JS异步宏队列微队列原理详解
Sep 09 Javascript
JS中如何优雅的使用async await详解
Oct 05 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
基于qmail的完整WEBMAIL解决方案安装详解
2006/10/09 PHP
简单的php中文转拼音的实现代码
2014/02/11 PHP
jQuery 动态酷效果实现总结
2009/12/27 Javascript
为什么要在引入的css或者js文件后面加参数的详细讲解
2013/05/03 Javascript
JQuery 文本框回车跳到下一个文本框示例代码
2013/08/30 Javascript
js格式化时间小结
2014/11/03 Javascript
Linux下使用jq友好的打印JSON技巧分享
2014/11/18 Javascript
javascript中JSON.parse()与eval()解析json的区别
2016/05/19 Javascript
jQuery判断元素是否显示 是否隐藏的简单实现代码
2016/05/19 Javascript
详解Vue.js——60分钟组件快速入门(上篇)
2016/12/05 Javascript
Bootstrap 填充Json数据的实例代码
2017/01/11 Javascript
jquery滚动条插件slimScroll使用方法
2017/02/09 Javascript
jQuery事件与动画基础详解
2017/02/23 Javascript
nodejs搭建本地服务器并访问文件的方法
2017/03/03 NodeJs
javascript实现非常简单的小数取整功能示例
2017/06/13 Javascript
使用vue-router beforEach实现判断用户登录跳转路由筛选功能
2018/06/25 Javascript
Node.js Event Loop各阶段讲解
2019/03/08 Javascript
[52:44]VGJ.T vs infamous Supermajor小组赛D组败者组第一轮 BO3 第一场 6.3
2018/06/04 DOTA
python opencv实现切变换 不裁减图片
2018/07/26 Python
手写一个python迭代器过程详解
2019/08/27 Python
python实现的接收邮件功能示例【基于网易POP3服务器】
2019/09/11 Python
Python Django框架模板渲染功能示例
2019/11/08 Python
在tensorflow下利用plt画论文中loss,acc等曲线图实例
2020/06/15 Python
白宫黑市官网:White House Black Market
2016/11/17 全球购物
美国男士和女士奢侈品折扣手表购物网站:Certified Watch Store
2018/06/13 全球购物
馥绿德雅美国官方网站:Rene Furterer头皮护理专家
2019/05/01 全球购物
linux面试相关问题
2012/08/11 面试题
大学毕业生通用自荐信范文
2013/10/31 职场文书
岗位职责定义及内容
2013/11/08 职场文书
组织关系转移介绍信
2014/01/16 职场文书
先进工作者获奖感言
2014/02/08 职场文书
大学四年个人的自我评价
2014/02/26 职场文书
会计人员岗位职责
2014/03/19 职场文书
村级换届选举方案
2014/05/10 职场文书
幼儿园六一儿童节演讲稿
2015/03/19 职场文书
导游词之黄帝陵景区
2019/09/16 职场文书