zoukankan      html  css  js  c++  java
  • 日常代码优化系列:(一)获取url参数

    最近刷牛客网的时候,看到某大神写的 获取url参数 的简洁写法,正则用的那叫一个6,顿时心生敬佩,赶紧来学习膜拜一下~~

    题目描述:获取 url 中的参数

    1. 指定参数名称,返回该参数的值 或者 空字符串
    2. 不指定参数名称,返回全部的参数对象 或者 {}
    3. 如果存在多个同名参数,则返回数组
    function getUrlParam(sUrl,sKey){
        var result = {};
        sUrl.replace(/??(w+)=(w+)&?/g,function(a,k,v){
            if(result[k] !== void 0){
                var t = result[k];
                result[k] = [].concat(t,v);
            }else{
                result[k] = v;
            }
        });
        if(sKey === void 0){
            return result;
        }else{
            return result[sKey] || '';
        }
    }

    1、getUrlParam 函数接收两个参数,分别是 surl 和 指定的参数名称(可能为空)。

    2、声明一个空的对象,用来存放字符串中的 参数名:参数值;

    3、使用 string 的 replace 方法,需要注意的是,如果第一个参数是正则表达式,并且其为全局匹配模式,第二个参数为函数,那么这个方法将被多次调用,每次匹配都会被调用,否则只在第一次会调用。

    str.replace(regexp|substr, newSubStr|function)
    sUrl.replace(/??(w+)=(w+)&?/g,function(a,k,v){...}) // 在surl中查找匹配 /??(w+)=(w+)&?/g 的字符串 a,其中第一个(w+)捕获组的匹配项为 k;第二个(w+)捕获组的匹配项为 v。
    以 'https://www.baidu.com/?Id=1&name=hqq&name=gb'为例:
      第一次匹配结果为:a='
    ?Id=1&' , k='Id' , v='1'
      第二次匹配结果为:a='name=hqq&' , k='name' , v='hqq'
      第三次匹配结果为:a='name=gb' , k='name' , v='gb'
    由于正则使用了全局匹配模式,所以每次匹配都会调用后面的匿名函数。
    if(result[k] != void 0){ // 目的是判断 result[k]是否为 undefined,不直接使用undefined的原因是,undefined 有可能会被修改,而 void 0 返回的值永远都是 undefined
        var t = result[k]; // 将 result 中 key 为 k 的 值赋给 t
        result[k] = [].concat(t,v);// 如果参数名称 k 已存在,将对应的参数值1,与传入的参数值2合并成一个数组,返回给result[k]即可 
    }


  • 相关阅读:
    Pyechart——学习
    matplotlib——散点图、条形图、直方图
    matplotlib——折线图
    寻找n以内的亲密数对
    Golang判断时间点处于今天
    寒假作业3
    寒假作业2
    面向对象程序设计寒假作业1
    自我介绍
    关于cve2019_0708的反弹shell
  • 原文地址:https://www.cnblogs.com/CassieHouse/p/9674667.html
Copyright © 2011-2022 走看看