function parseParam(url) { // 将浏览器地址中 ‘?’ 后面的字符串取出来 const paramsStr = /.+?(.+)$/.exec(url)[1]; // 将截取的字符串以 ‘&’ 分割后存到数组中 const paramsArr = paramsStr.split('&'); // 定义存放解析后的对象 let paramsObj = {}; // 遍历 paramsArr.forEach(param => { // 判断是否含有key和value if (/=/.test(param)) { // 结构获取对象的key和value let [key, val] = param.split('='); // 解码 val = decodeURIComponent(val); // 判断是否转为数字 val = /^d+$/.test(val) ? parseFloat(val) : val; // 判断存放对象中是否存在key属性 if (paramsObj.hasOwnProperty(key)) { // 存在的话就存放一个数组 paramsObj[key] = [].concat(paramsObj[key], val); } else { // 不存在就存放一个对象 paramsObj[key] = val; } } else { // 没有value的情况 paramsObj[param] = true; } }) return paramsObj; }
例子:
let url = 'https://www.baidu.com?username=%22tmc%22&password=%22123456%22&dutiy=%E5%89%8D%E7%AB%AF%E6%94%BB%E5%9F%8E%E7%8B%AE&flag'; console.log(parseParam(url)) {
username: '"tmc"', password: '"123456"', dutiy: '前端攻城狮', flag: true }