url 解析

function parseParam(url) {
                const paramsStr = /.+?(.+)$/.exec(url)[1]; // 将 ? 后面的字符串取出来
                //exec() 方法用于检索字符串中的正则表达式的匹配。
                const paramsArr = paramsStr.split('&'); // 将字符串以 & 分割后存到数组中
                let paramsObj = {};
                // 将 params 存到对象中
                paramsArr.forEach(param => {
                    if (/=/.test(param)) { // 处理有 value 的参数
                        // 数组解构
                        let [key, val] = param.split('='); // 分割 key 和 value
                        val = decodeURIComponent(val); // 解码
                        val = /^d+$/.test(val) ? parseFloat(val) : val; // 判断是否转为数字
                        //test() 方法用于检测一个字符串是否匹配某个模式.
                        if (paramsObj.hasOwnProperty(key)) { // 如果对象有 key,则添加一个值
                            paramsObj[key] = [].concat(paramsObj[key], val);
                            //concat() 方法用于连接两个或多个数组。
                            //该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。
                        } else { // 如果对象没有这个 key,创建 key 并设置值
                            paramsObj[key] = val;
                        }
                    } else { // 处理没有 value 的参数
                        paramsObj[param] = true;
                    }
                })

                return paramsObj;
            }

            let str =
                'https://www.baidu.com/s?a=1&b=2&a=3'
            console.log(parseParam(str));

作者:孟繁贵 Email:meng010387@126.com 期待共同进步!

原文地址:https://www.cnblogs.com/mengfangui/p/14656493.html