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

  • 相关阅读:
    HDU1548:A strange lift
    hdu1978_How many ways dfs+记忆化搜索
    HDU1518:Square(DFS)
    HDU ACM 1495 非常可乐(广搜BFS)
    HDU1372:Knight Moves(BFS)
    662_二叉树最大宽度
    590_N叉树的后序遍历
    一直在坚持
    动态链接库DLL的操作顺序
    最近木马的查杀方法/各类杀毒软件的使用
  • 原文地址:https://www.cnblogs.com/djlxs/p/5890020.html
Copyright © 2011-2022 走看看