通过正则格式化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滚动字幕效果实现代码
Jun 22 Javascript
js弹出的对话窗口永远保持居中显示
Dec 15 Javascript
JavaScript自定义方法实现trim()、Ltrim()、Rtrim()的功能
Nov 03 Javascript
jquery实现表单验证简单实例演示
Nov 23 Javascript
使用Bootstrap框架制作查询页面的界面实例代码
May 27 Javascript
详解js树形控件—zTree使用总结
Dec 28 Javascript
原生js实现选项卡功能
Mar 08 Javascript
源码分析Vue.js的监听实现教程
Apr 23 Javascript
简单实现vue中的依赖收集与响应的方法
Feb 18 Javascript
js设置鼠标悬停改变背景色实现详解
Jun 26 Javascript
vue单文件组件无法获取$refs的问题
Jun 24 Javascript
原生JS封装vue Tab切换效果
Apr 28 Vue.js
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 防止单引号,双引号在接受页面转义
2008/07/10 PHP
php二维数组排序与默认自然排序的方法介绍
2013/04/27 PHP
php实现微信公众号主动推送消息
2015/12/31 PHP
Laravel路由设定和子路由设定实例分析
2016/03/30 PHP
基于PHP生成简单的验证码
2016/06/01 PHP
php中str_pad()函数用法分析
2017/03/28 PHP
Laravel中的Blade模板引擎示例详解
2017/10/10 PHP
php两点地理坐标距离的计算方法
2018/12/29 PHP
javascript while语句和do while语句的区别分析
2007/12/08 Javascript
javascript写的一个链表实现代码
2009/10/25 Javascript
innerHTML与jquery里的html()区别介绍
2012/10/12 Javascript
Jquery 自定义动画概述及示例
2013/03/29 Javascript
js中Math之random,round,ceil,floor的用法总结
2013/12/26 Javascript
javascript函数作用域学习示例(js作用域)
2014/01/13 Javascript
js拼接html注意问题示例探讨
2014/07/14 Javascript
JS实现多级菜单中当前菜单不随页面跳转样式而发生变化
2017/05/30 Javascript
iscroll.js滚动加载实例详解
2017/07/18 Javascript
Parcel.js + Vue 2.x 极速零配置打包体验教程
2017/12/24 Javascript
使用sessionStorage解决vuex在页面刷新后数据被清除的问题
2018/04/13 Javascript
JS数组求和的常用方法总结【5种方法】
2019/01/14 Javascript
微信小程序实现滑动操作代码
2020/04/23 Javascript
vue-以文件流-blob-的形式-下载-导出文件操作
2020/08/07 Javascript
浅谈Python2.6和Python3.0中八进制数字表示的区别
2017/04/28 Python
符合语言习惯的 Python 优雅编程技巧【推荐】
2018/09/25 Python
Python Scapy随心所欲研究TCP协议栈
2018/11/20 Python
Python Sympy计算梯度、散度和旋度的实例
2019/12/06 Python
python基于property()函数定义属性
2020/01/22 Python
Belle Maison倍美丛官网:日本千趣会旗下邮购网站
2016/07/22 全球购物
在阿尔卑斯山或希腊度过快乐假期:Alpine Elements
2019/12/28 全球购物
伦敦新晋轻奢耳饰潮牌:Tada & Toy
2020/05/25 全球购物
毕业生简历自我评价范文
2014/04/09 职场文书
爱国口号
2014/06/19 职场文书
学生安全责任书模板
2014/07/25 职场文书
2019年妇科护士的自我鉴定(3篇)
2019/09/26 职场文书
关于vue中如何监听数组变化
2021/04/28 Vue.js
Python内置类型集合set和frozenset的使用详解
2022/04/26 Python