將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字符轉碼。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM