通过正则格式化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 相关文章推荐
学习YUI.Ext 第二天
Mar 10 Javascript
javascript 面向对象全新理练之原型继承
Dec 03 Javascript
什么是DOM(Document Object Model)文档对象模型
Mar 05 Javascript
js操作iframe兼容各种主流浏览器示例代码
Jul 22 Javascript
jquery基础教程之deferred对象使用方法
Jan 22 Javascript
Javascript 实现图片无缝滚动
Dec 19 Javascript
JavaScript实现简单图片翻转的方法
Apr 17 Javascript
js如何改变文章的字体大小
Jan 08 Javascript
jquery自动补齐功能插件flexselect用法示例
Aug 06 Javascript
基于jQuery实现咖啡订单管理简单应用
Feb 10 Javascript
JavaScript实现购物车基本功能
Jul 21 Javascript
js获取图片的base64编码并压缩
Dec 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
CentOS 安装 PHP5.5+Redis+XDebug+Nginx+MySQL全纪录
2015/03/25 PHP
列举PHP的Yii 2框架的开发优势
2015/07/03 PHP
php 在字符串指定位置插入新字符的简单实现
2016/06/28 PHP
利用PHP绘图函数实现简单验证码功能的方法
2016/10/18 PHP
PHP实现生成推广海报的方法详解
2018/03/14 PHP
PHP实现小程序批量通知推送
2018/11/27 PHP
PHP如何实现阿里云短信sdk灵活应用在项目中的方法
2019/06/14 PHP
javascript中利用数组实现的循环队列代码
2010/01/24 Javascript
jquery $.ajax各个事件执行顺序
2010/10/15 Javascript
javascript几个易错点记录
2014/11/26 Javascript
利用vscode编写vue的简单配置详解
2017/06/17 Javascript
tangram.js库实现js类的方式实例分析
2018/01/06 Javascript
Javascript获取某个月的天数
2018/05/30 Javascript
基于D3.js实现时钟效果
2018/07/17 Javascript
JavaScript实现栈结构Stack过程详解
2020/03/07 Javascript
Vue清除定时器setInterval优化方案分享
2020/07/21 Javascript
JavaScript读取本地文件常用方法流程解析
2020/10/12 Javascript
利用Python将每日一句定时推送至微信的实现方法
2018/08/13 Python
Python Pandas 获取列匹配特定值的行的索引问题
2019/07/01 Python
django foreignkey外键使用的例子 相当于left join
2019/08/06 Python
python如何进行矩阵运算
2020/06/05 Python
Python连接Mysql进行增删改查的示例代码
2020/08/03 Python
Python读取pdf表格写入excel的方法
2021/01/22 Python
深入浅析css3 中display box使用方法
2015/11/25 HTML / CSS
大都会艺术博物馆商店:The Met Store
2018/06/22 全球购物
泰海淘:泰国king Power王权免税集团旗下跨境海淘综合型电商
2020/07/26 全球购物
体育纪念品、亲笔签名的体育收藏品:Steiner Sports
2020/07/31 全球购物
remote接口和home接口主要作用
2013/05/15 面试题
平面设计师工作职责范文
2013/12/03 职场文书
中学生操行评语
2014/04/24 职场文书
优秀团队申报材料
2014/12/26 职场文书
学习党史心得体会2016
2016/01/23 职场文书
《狼牙山五壮士》教学反思
2016/02/17 职场文书
《小蝌蚪找妈妈》教学反思
2016/02/23 职场文书
HTML基础详解(下)
2021/10/16 HTML / CSS
《雀魂PONG☆》4月1日播出 PV角色设定情报
2022/03/20 日漫