通过正则格式化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 相关文章推荐
JObj预览一个JS的框架
Mar 13 Javascript
js函数使用技巧之 setTimeout(function(){},0)
Feb 09 Javascript
js 处理URL实用技巧
Nov 23 Javascript
根据json字符串生成Html的一种方式
Jan 09 Javascript
JS window对象的top、parent、opener含义介绍
Dec 03 Javascript
javascript Array 数组常用方法
Apr 05 Javascript
jQuery使用$.ajax提交表单完整实例
Dec 11 Javascript
快速解决jquery.touchSwipe左右滑动和垂直滚动条冲突
Apr 15 Javascript
bootstrap组件之导航组件使用方法
Jan 19 Javascript
Bootstrap进度条实现代码解析
Mar 07 Javascript
深入理解 JavaScript 中的 JSON
Apr 06 Javascript
Javascript es7中比较实用的两个方法示例
Jul 21 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开发微信支付的代码分享
2014/05/25 PHP
php实现兼容2038年后Unix时间戳转换函数
2015/03/18 PHP
thinkPHP显示不出验证码的原因与解决方法分析
2017/05/20 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
图片自动更新(说明)
2006/10/02 Javascript
用javascript获取地址栏参数
2006/12/22 Javascript
用Jquery重写windows.alert方法实现思路
2013/04/03 Javascript
ajaxFileUpload.js插件支持多文件上传的方法
2014/09/02 Javascript
input输入密码变黑点密文的实现方法
2017/01/09 Javascript
jquery实现图片平滑滚动详解
2017/03/22 jQuery
js实现水平滚动菜单导航
2017/07/21 Javascript
Vue 页面跳转不用router-link的实现代码
2018/04/12 Javascript
vue通过点击事件读取音频文件的方法
2018/05/30 Javascript
vue之将echart封装为组件
2018/06/02 Javascript
微信小程序scroll-x失效的完美解决方法
2018/07/18 Javascript
JS基于ES6新特性async await进行异步处理操作示例
2019/02/02 Javascript
更强大的vue ssr实现预取数据的方式
2019/07/19 Javascript
小程序和web画三角形实现解析
2019/09/02 Javascript
JS实现时间校验的代码
2020/05/25 Javascript
Python中decorator使用实例
2015/04/14 Python
socket + select 完成伪并发操作的实例
2017/08/15 Python
Django 反向生成url实例详解
2019/07/30 Python
pytorch打印网络结构的实例
2019/08/19 Python
利用pandas合并多个excel的方法示例
2019/10/10 Python
枚举和一组预处理的#define有什么不同
2016/09/21 面试题
计算机应用职专应届生求职信
2013/11/12 职场文书
医药营销个人求职信范文
2014/02/07 职场文书
工会趣味活动方案
2014/08/18 职场文书
大三学年自我鉴定范文(3篇)
2014/09/28 职场文书
运动会搞笑广播稿
2014/10/14 职场文书
2014年平安建设工作总结
2014/11/19 职场文书
小学少先队工作总结2015
2015/05/26 职场文书
婚礼迎宾词大全
2015/08/10 职场文书
初中体育教学随笔
2015/08/15 职场文书
go设置多个GOPATH的方式
2021/05/05 Golang
MYSQL常用函数介绍
2022/05/05 MySQL