通过正则格式化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 相关文章推荐
更正确的asp冒泡排序
May 24 Javascript
javascript一个无懈可击的实例化XMLHttpRequest的方法
Oct 13 Javascript
javascript SpiderMonkey中的函数序列化如何进行
Dec 05 Javascript
运算符&amp;&amp;的三个不同层次
Apr 07 Javascript
Js控制滑轮左右滑动实例
Feb 13 Javascript
js实现精确到秒的倒计时效果
May 29 Javascript
vue-cli的eslint相关用法
Sep 29 Javascript
微信小程序实现全国机场索引列表
Jan 31 Javascript
jQuery解析json格式数据示例
Sep 01 jQuery
在JS循环中使用async/await的方法
Oct 12 Javascript
bootstrap-paginator服务器端分页使用方法详解
Feb 13 Javascript
Vue 按照创建时间和当前时间显示操作(刚刚,几小时前,几天前)
Sep 10 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
杏林同学录(五)
2006/10/09 PHP
php防注
2007/01/15 PHP
php限制上传文件类型并保存上传文件的方法
2015/03/13 PHP
php获取图片信息的方法详解
2015/12/10 PHP
Laravel框架分页实现方法分析
2018/06/12 PHP
php多进程模拟并发事务产生的问题小结
2018/12/07 PHP
laravel 5.5 关闭token的3种实现方式
2019/10/24 PHP
TP5框架实现的数据库备份功能示例
2020/04/05 PHP
jquery.ui.progressbar 中文文档
2009/11/26 Javascript
js 实现在离开页面时提醒未保存的信息(减少用户重复操作)
2013/01/16 Javascript
jquery实现图片等比例缩放以及max-width在ie中不兼容解决
2013/03/21 Javascript
JavaScript中this的使用详解
2013/11/08 Javascript
JQuery实现动态表格点击按钮表格增加一行
2014/08/24 Javascript
轻松创建nodejs服务器(10):处理上传图片
2014/12/18 NodeJs
再谈Javascript中的异步以及如何异步
2016/08/19 Javascript
javascript 将共享属性迁移到原型中去的实现方法
2016/08/31 Javascript
bootstrap表单示例代码分享
2017/05/18 Javascript
纯JS实现简单的日历
2017/06/26 Javascript
javascript随机变色实例代码
2019/10/15 Javascript
python字符串排序方法
2014/08/29 Python
django实现用户登陆功能详解
2017/12/11 Python
python list删除元素时要注意的坑点分享
2018/04/18 Python
python动态进度条的实现代码
2019/07/03 Python
Django表单提交后实现获取相同name的不同value值
2020/05/14 Python
浅谈Python爬虫原理与数据抓取
2020/07/21 Python
Django数据统计功能count()的使用
2020/11/30 Python
欧洲高端品牌直销店:Fashionesta
2016/08/31 全球购物
Avène雅漾美国官方网站:敏感肌肤护理专家
2016/10/24 全球购物
DNA基因检测和分析:23andMe
2019/05/01 全球购物
EMU Australia澳大利亚官网:澳大利亚本土雪地靴品牌
2019/07/24 全球购物
个人实用简单的自我评价
2013/10/19 职场文书
税务干部群众路线教育实践活动自我剖析材料
2014/09/21 职场文书
歼十出击观后感
2015/06/11 职场文书
格列夫游记读书笔记
2015/07/01 职场文书
2016秋季田径运动会广播稿
2015/12/21 职场文书
DQL数据查询语句使用示例
2022/12/24 MySQL