通过正则格式化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 相关文章推荐
Extjs学习笔记之八 继承和事件基础
Jan 08 Javascript
js限制文本框为整数和货币的函数代码
Oct 13 Javascript
时间戳转换为时间 年月日时间的JS函数
Aug 19 Javascript
jQuery实现加入购物车飞入动画效果
Mar 14 Javascript
javascript数组去重小结
Mar 07 Javascript
JS敏感词过滤代码
Dec 23 Javascript
Bootstrap源码解读标签、徽章、缩略图和警示框(8)
Dec 26 Javascript
自制简易打赏功能的实例
Sep 02 Javascript
原生JavaScript实现的简单放大镜效果示例
Feb 07 Javascript
webpack项目调试以及独立打包配置文件的方法
Feb 28 Javascript
Vue实现移动端页面切换效果【推荐】
Nov 13 Javascript
基于vue-cli3和element实现登陆页面
Nov 13 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
雄兵连三大错觉:凯莎没了,凉冰阵亡了,华烨觉得自己又行了
2020/04/09 国漫
PHP数据库连接mysql与mysqli对比分析
2016/01/04 PHP
php 微信开发获取用户信息如何实现
2016/12/13 PHP
JavaScript 精粹读书笔记(1,2)
2010/02/07 Javascript
javascript 鼠标拖动图标技术
2010/02/07 Javascript
屏蔽网页右键复制和ctrl+c复制的js代码
2013/01/04 Javascript
javascript数组的使用
2013/03/28 Javascript
js 立即调用的函数表达式如何写
2014/01/12 Javascript
捕获和分析JavaScript Error的方法
2014/03/25 Javascript
jQuery中ajax和post处理json的不同示例对比
2014/11/02 Javascript
微信小程序 location API实例详解
2016/10/02 Javascript
vue-cli项目如何使用vue-resource获取本地的json数据(模拟服务端返回数据)
2017/08/04 Javascript
Vue2 模板template的四种写法总结
2018/02/23 Javascript
javaScript实现鼠标在文字上悬浮时弹出悬浮层效果
2020/04/12 Javascript
详解如何在vue项目中使用layui框架及采坑
2019/05/05 Javascript
Vuex新手的理解与使用详解
2019/05/31 Javascript
关于layui 弹出层一闪而过就消失的解决方法
2019/09/09 Javascript
JavaScript仿京东秒杀倒计时
2020/03/17 Javascript
Python2与python3中 for 循环语句基础与实例分析
2017/11/20 Python
Python倒排索引之查找包含某主题或单词的文件
2019/11/13 Python
python matplotlib 画dataframe的时间序列图实例
2019/11/20 Python
python压包的概念及实例详解
2021/02/17 Python
英国最大的独立玩具专卖店:The Entertainer
2019/09/06 全球购物
大学四年规划书范文
2013/12/27 职场文书
2014年社区学雷锋活动总结
2014/03/09 职场文书
食品采购员岗位职责
2014/04/14 职场文书
人身意外保险授权委托书
2014/10/01 职场文书
2014年党小组工作总结
2014/12/20 职场文书
保研推荐信范文
2015/03/25 职场文书
环保守法证明
2015/06/24 职场文书
演讲稿之我的初心我的成长
2019/08/12 职场文书
导游词之山东孔庙
2019/11/04 职场文书
nginx 多个location转发任意请求或访问静态资源文件的实现
2021/03/31 Servers
JavaScript嵌入百度地图API的最详细方法
2021/04/16 Javascript
DIV CSS实现网页背景半透明效果
2021/12/06 HTML / CSS
Python实现灰色关联分析与结果可视化的详细代码
2022/03/25 Python