将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字符转码。

 

posted @ 2016-09-20 21:24 DJL箫氏 阅读(...) 评论(...) 编辑 收藏