通过正则格式化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 相关文章推荐
理解Javascript_06_理解对象的创建过程
Oct 15 Javascript
JS按位非(~)运算符与~~运算符的理解分析
Jul 31 Javascript
使用Javascript接收get传递的值的代码
Nov 30 Javascript
jquery乱码与contentType属性设置问题解决方案
Jan 07 Javascript
JQGrid的用法解析(列编辑,添加行,删除行)
Nov 08 Javascript
Jquery创建一个层当鼠标移动到层上面不消失效果
Dec 12 Javascript
jQuery EasyUI中DataGird动态生成列的方法
Apr 05 Javascript
微信小程序 picker-view 组件详解及简单实例
Jan 10 Javascript
js中的DOM模拟购物车功能
Mar 22 Javascript
基于AGS JS开发自定义贴图图层
Mar 31 Javascript
vue.draggable实现表格拖拽排序效果
Dec 01 Javascript
微信小程序实现音乐播放页面布局
Dec 11 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作的文本留言本的例子(二)
2006/10/09 PHP
PHP编码规范-php coding standard
2007/03/16 PHP
Yii2中使用asset压缩js,css文件的方法
2016/11/24 PHP
PHP多进程编程实例详解
2017/07/19 PHP
YUI 读码日记之 YAHOO.lang.is*
2008/03/22 Javascript
js cookies实现简单统计访问次数
2009/11/24 Javascript
复制小说文本时出现的随机乱码的去除方法
2010/09/07 Javascript
浅谈checkbox的一些操作(实战经验)
2013/11/20 Javascript
学JavaScript七大注意事项【必看】
2016/05/04 Javascript
Ubuntu系统下Angularjs开发环境安装
2016/09/01 Javascript
利用JS提交表单的几种方法和验证(必看篇)
2016/09/17 Javascript
通过jsonp获取json数据实现AJAX跨域请求
2017/01/22 Javascript
JavaScript中三种常见的排序方法
2017/02/24 Javascript
jQuery插件FusionWidgets实现的Bulb图效果示例【附demo源码下载】
2017/03/23 jQuery
vue之nextTick全面解析
2017/05/17 Javascript
本地存储localStorage用法详解
2017/07/31 Javascript
JavaScript设计模式之装饰者模式实例详解
2019/01/17 Javascript
Vue使用localStorage存储数据的方法
2019/05/27 Javascript
[46:32]Fnatic vs OG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
在Python的struct模块中进行数据格式转换的方法
2015/06/17 Python
python递归删除指定目录及其所有内容的方法
2017/01/13 Python
Python中str.format()详解
2017/03/12 Python
Python读取txt内容写入xls格式excel中的方法
2018/10/11 Python
Pandas操作CSV文件的读写实现方法
2019/11/13 Python
python 实现快速生成连续、随机字母列表
2019/11/28 Python
Holland & Barrett爱尔兰:英国领先的健康零售商
2019/03/31 全球购物
财务主管的岗位职责
2013/12/30 职场文书
写给保洁员表扬信
2014/01/08 职场文书
作弊检讨书
2015/01/27 职场文书
幼儿园家长反馈意见
2015/06/03 职场文书
宇宙与人观后感
2015/06/05 职场文书
预备党员入党感想
2015/08/10 职场文书
MySQL 存储过程的优缺点分析
2021/05/20 MySQL
Golang ort 中的sortInts 方法
2022/04/24 Golang
阿里云 Windows server 2019 配置FTP
2022/04/28 Servers
利用Redis实现点赞功能的示例代码
2022/06/28 Redis