通过正则格式化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 相关文章推荐
Jquery 数据选择插件Pickerbox使用介绍
Aug 24 Javascript
Jquery创建一个层当鼠标移动到层上面不消失效果
Dec 12 Javascript
AngularJS Module方法详解
Dec 08 Javascript
移动端点击态处理的三种实现方式
Jan 12 Javascript
原生js实现对Ajax的封装(仿jquery)
Jan 22 Javascript
node.js express中app.param的用法详解
Jul 16 Javascript
[js高手之路]设计模式系列课程-发布者,订阅者重构购物车的实例
Aug 29 Javascript
Webpack打包字体font-awesome的方法示例
Apr 26 Javascript
jQuery实现获取及设置CSS样式操作详解
Sep 05 jQuery
vue使用rem实现 移动端屏幕适配
Sep 26 Javascript
element form 校验数组每一项实例代码
Oct 10 Javascript
Node.js实现批量下载图片简单操作示例
Jan 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极大的增强功能和性能
2006/10/09 PHP
第五节--克隆
2006/11/16 PHP
php 智能404跳转代码,适合换域名没改变目录的网站
2010/06/04 PHP
php操作xml
2013/10/27 PHP
PHP YII框架开发小技巧之模型(models)中rules自定义验证规则
2015/11/16 PHP
PHP一致性hash分布式算法封装类定义与用法示例
2018/08/04 PHP
jquery 表单取值常用代码
2009/12/22 Javascript
文本框中,回车键触发事件的js代码[多浏览器兼容]
2010/06/07 Javascript
js实现刷新iframe的方法汇总
2015/04/27 Javascript
简述Matlab中size()函数的用法
2016/03/20 Javascript
JS实现的Unicode编码转换操作示例
2017/04/28 Javascript
JS获取鼠标坐标并且根据鼠标位置不同弹出不同内容
2017/06/12 Javascript
jQuery Ajax实现Select多级关联动态绑定数据的实例代码
2018/10/26 jQuery
微信小程序自定义组件components(代码详解)
2019/10/21 Javascript
vuex实现数据状态持久化
2019/11/11 Javascript
如何编写一个 Webpack Loader的实现
2020/10/18 Javascript
Vue 使用iframe引用html页面实现vue和html页面方法的调用操作
2020/11/16 Javascript
vue+element实现动态加载表单
2020/12/13 Vue.js
[02:39]我与DAC之Newbee.Moogy:从论坛到TI
2018/03/26 DOTA
[41:17]VG vs Optic 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python实现linux服务器批量修改密码并生成execl
2014/04/22 Python
深入Python函数编程的一些特性
2015/04/13 Python
python实现根据ip地址反向查找主机名称的方法
2015/04/29 Python
Python实现的选择排序算法原理与用法实例分析
2017/11/22 Python
python如何为被装饰的函数保留元数据
2018/03/21 Python
python实现集中式的病毒扫描功能详解
2019/07/09 Python
python实现银行管理系统
2019/10/25 Python
使用Python+selenium实现第一个自动化测试脚本
2020/03/17 Python
给ubuntu18安装python3.7的详细教程
2020/06/08 Python
Ellos瑞典官网:北欧地区时尚、美容和住宅领域领先的电子商务网站
2019/11/21 全球购物
青春寄语大全
2014/04/09 职场文书
人口与计划生育责任书
2015/05/09 职场文书
85句关于理想的名言警句大全
2019/08/22 职场文书
django如何自定义manage.py管理命令
2021/04/27 Python
Java Dubbo框架知识点梳理
2021/06/26 Java/Android
MySQL中CURRENT_TIMESTAMP的使用方式
2021/11/27 MySQL