• 通过正则格式化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秒。。。

  • 相关阅读:
    中文简体汉字
    文件下载
    javaBean
    servlet和JSP笔记(EL表达式、javabean、jsp九大内置对象等)
    Http请求和响应
    Eclipse快捷键(可更新)
    反射笔记①
    泛型, 枚举,单例模式
    Ubuntu 14.04 安装 A卡HD7750 官方闭源 显卡驱动
    C语言--二维数组,字符串数组,多维数组
  • 原文地址:https://www.cnblogs.com/webjs/p/2837678.html
Copyright © 2020-2023  润新知