通过正则格式化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 去字符串空格终极版(支持utf8)
Nov 14 Javascript
jquery 学习之二 属性 文本与值(text,val)
Nov 25 Javascript
javascript中有趣的反柯里化深入分析
Dec 05 Javascript
jquery图片切换插件
Mar 16 Javascript
js判断当前页面用什么浏览器打开的方法
Jan 06 Javascript
js仿支付宝填写支付密码效果实现多方框输入密码
Mar 09 Javascript
jQuery插件pagination实现无刷新分页
May 21 Javascript
如何解决IONIC页面底部被遮住无法向上滚动问题
Sep 06 Javascript
完美的js div拖拽实例代码
Sep 24 Javascript
javaScript嗅探执行神器-sniffer.js
Feb 14 Javascript
jQuery实现选中行变色效果(实例讲解)
Jul 06 jQuery
Vue不能检测到Object/Array更新的情况的解决
Jun 26 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
神族 PROTOSS 概述
2020/03/14 星际争霸
PHP 程序员应该使用的10个组件
2009/10/31 PHP
php 数组的一个悲剧?
2011/05/11 PHP
深入了解PHP类Class的概念
2012/06/14 PHP
php实现的SESSION类
2014/12/02 PHP
php字符串函数学习之substr()
2015/03/27 PHP
php使用Swoole实现毫秒级定时任务的方法
2020/09/04 PHP
jQuery之排序组件的深入解析
2013/06/19 Javascript
验证码在IE中不刷新而谷歌等浏览器正常的解决方案
2014/03/18 Javascript
JavaScript避免内存泄露及内存管理技巧
2014/09/05 Javascript
SpringMVC框架下JQuery传递并解析Json格式的数据是如何实现的
2015/12/10 Javascript
学习Javascript面向对象编程之封装
2016/02/23 Javascript
基于BootStrap Metronic开发框架经验小结【二】列表分页处理和插件JSTree的使用
2016/05/12 Javascript
JavaScript知识点总结(十一)之js中的Object类详解
2016/05/31 Javascript
深入理解jQuery之事件移除
2016/06/02 Javascript
js中利用cookie实现记住密码功能
2020/08/20 Javascript
Vue之Watcher源码解析(1)
2017/07/19 Javascript
angularjs http与后台交互的实现示例
2018/12/21 Javascript
vue父组件触发事件改变子组件的值的方法实例详解
2019/05/07 Javascript
详解简单易懂的 ES6 Iterators 指南和示例
2019/09/24 Javascript
Python中使用tarfile压缩、解压tar归档文件示例
2015/04/05 Python
python时间日期函数与利用pandas进行时间序列处理详解
2018/03/13 Python
pyQt5实时刷新界面的示例
2019/06/25 Python
英国高街奥特莱斯:Highstreet Outlet
2019/11/21 全球购物
在阿尔卑斯山或希腊度过快乐假期:Alpine Elements
2019/12/28 全球购物
介绍一下内联、左联、右联
2013/12/31 面试题
2014年党员加强作风建设思想汇报
2014/09/15 职场文书
信息合作协议书
2014/10/09 职场文书
孟佩杰观后感
2015/06/17 职场文书
人代会简报
2015/07/21 职场文书
2015年中学体育教师工作总结
2015/10/23 职场文书
入党转正申请书范文
2019/05/20 职场文书
如何书写民事调解协议书?
2019/06/25 职场文书
管理者日常工作必备:22条企业管理流程模板!
2019/07/12 职场文书
创业计划书之家政服务
2019/09/18 职场文书
gojs实现蚂蚁线动画效果
2022/02/18 Javascript