zoukankan      html  css  js  c++  java
  • 通过正则格式化url查询字符串

    看到项目里通过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秒。。。

  • 相关阅读:
    53、Gif 控件GifView 的使用,播放gif图片
    52、图片缩放库 PhotoView
    51、自定义View基础和原理
    Adapter适配器 final int Id 导致选中的Item不在当前界面
    Linux目录结构
    Linux包管理工具分析
    Linux 软件包安装管理
    MySQL配置详解
    MySQL 5.5.x配置文件详解
    Linux Apache2 配置介绍
  • 原文地址:https://www.cnblogs.com/webjs/p/2837678.html
Copyright © 2011-2022 走看看