zoukankan      html  css  js  c++  java
  • 将URL截取转换成json

    这是今天的面试题,其实不难,但是今天状态真的是差的要死,最后跪了,前端虐我千百遍,我待前端如初恋。只想说找工作累。

    function getQueryObject(url) {
        url = url == null ? window.location.href : url;
        var search = url.substring(url.lastIndexOf("?") + 1);
        var obj = {};
        var reg = /([^?&=]+)=([^?&=]*)/g;
        search.replace(reg, function (rs, $1, $2) {
            var name = decodeURIComponent($1);
            var val = decodeURIComponent($2);               
            val = String(val);
            obj[name] = val;
            return rs;
        });
        return obj;
    }

    这是网上目前最流行的一种做法。我来解释一下,主要是正则。

    首先将字符串进行分割以“?”为分界线,当然我们在进行分割的时候要将得到的索引加一,不然会把这个?也包含进去。

    然后主要就是正则了。我们主要匹配的东西都是以query=name的形式存在,然后中间以&进行连接。那么我们的value和那么一般定义为除?&=之外的其他任何字符。

    +代表匹配一个或多个,零个肯定是不行的。*代表0个或多个,这里value没有是允许的。那么这里要注意的就是^在单独使用时,代表以什么开头,在中括号里面使用代表不包含的意思。正则基本就是这么多了。

    下面就是replace这个方法了,第一个参数就是要进行匹配的字符串,可以使字符串也可以是正则表达式。而后面可以使替换的字符串,也可以是一个函数。其中rs表示匹配成功的字符串序列,$1,表示第一个()内所匹配的内容,$2为第二个,依次类推。当我们使用全局匹配时,只要匹配成功的子串最后都会执行一遍function函数。详细链接

    decadeURIComponent就是url字符转码。

  • 相关阅读:
    Linux kernel device mapper
    草莓网
    openwrt系统源码地址
    ubuntu 安装eclipse for c++
    ubuntu下安装eclipse IDE for C/C++ developers
    Makefile 中:= ?= += =的区别
    core dump
    rtp
    skbuff
    A Neural Algorithm of Artistic Style
  • 原文地址:https://www.cnblogs.com/djlxs/p/5890020.html
Copyright © 2011-2022 走看看