通过正则格式化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不同页面传值的改进版
Sep 30 Javascript
jquery 结合C#后台的数组对文章的关键字自动添加链接的代码
Jul 15 Javascript
jquery图片轮播插件仿支付宝2013版全屏图片幻灯片
Apr 03 Javascript
JavaScript获取页面中第一个锚定文本的方法
Apr 03 Javascript
swtich/if...else的替代语句
Aug 16 Javascript
jquery层级选择器的实现(匹配后代元素div)
Sep 05 Javascript
js 性能优化之快速响应的用户界面
Feb 15 Javascript
Vue中的异步组件函数实现代码
Jul 20 Javascript
微信小程序实现topBar底部选择栏效果
Jul 20 Javascript
实现elementUI表单的全局验证的方法步骤
Apr 29 Javascript
vue实现计算器功能
Feb 22 Javascript
vue任意关系组件通信与跨组件监听状态vue-communication
Oct 18 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解析url并得到url参数方法总结
2018/10/11 PHP
PHP实现单例模式建立数据库连接的方法分析
2020/02/11 PHP
php判断数组是否为空的实例方法
2020/05/10 PHP
PHP实现简易用户登录系统
2020/07/10 PHP
借用Google的Javascript API Loader来加速你的网站
2009/01/28 Javascript
Js 代码中,ajax请求地址后加随机数防止浏览器缓存的原因
2013/05/07 Javascript
js的Boolean对象初始值示例
2014/03/04 Javascript
一个Action如何调用两个不同的方法
2014/05/22 Javascript
文本框倒叙输入让输入框的焦点始终在最开始的位置
2014/09/01 Javascript
jQuery中parents()和parent()的区别分析
2014/10/28 Javascript
jQuery ajax提交Form表单实例(附demo源码)
2016/04/06 Javascript
基于jQuery插件实现点击小图显示大图效果
2016/05/11 Javascript
JQuery在循环中绑定事件的问题详解
2016/06/02 Javascript
基于jQuery实现仿微博发布框字数提示
2016/07/27 Javascript
IntersectionObserver API 详解篇
2016/12/11 Javascript
深入了解JavaScript的逻辑运算符(与、或)
2016/12/20 Javascript
Electron + vue 打包桌面操作流程详解
2019/06/24 Javascript
Vue使用vue-recoure + http-proxy-middleware + vuex配合promise实现基本的跨域请求封装
2019/10/21 Javascript
js实现时间日期校验
2020/05/26 Javascript
[06:35]2014DOTA2国际邀请赛 老男孩梦圆西雅图中国军团世界最强
2014/07/22 DOTA
[02:26]2016国际邀请赛8月3日开战 中国军团出征西雅图
2016/08/02 DOTA
使用Node.js和Socket.IO扩展Django的实时处理功能
2015/04/20 Python
Python常用小技巧总结
2015/06/01 Python
Python补齐字符串长度的实例
2018/11/15 Python
python调用并链接MATLAB脚本详解
2019/07/05 Python
用Python实现将一张图片分成9宫格的示例
2019/07/05 Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
2019/08/06 Python
银行实习生的自我评价
2013/12/09 职场文书
开会迟到检讨书
2014/01/08 职场文书
母亲80寿诞答谢词
2014/01/16 职场文书
大学旷课检讨书
2014/01/28 职场文书
《尊严》教学反思
2014/02/11 职场文书
中青班党性分析材料
2014/02/16 职场文书
党的群众路线教育实践活动对照检查材料(教师)
2014/09/24 职场文书
AJAX学习笔记
2021/05/18 Javascript
使用python将HTML转换为PDF pdfkit包(wkhtmltopdf) 的使用方法
2022/04/21 Python