将网址转化为map或对象,方便取值

1. URL

复制代码
function getQuerySearchParams(key) {
    var urlObj = new URL(location.href);
    return urlObj.searchParams.get(key);
}

2. URLSearchParams

复制代码
function getQuerySearchParams(key) {
    var urlObj = new URL(location.href);
    console.log(urlObj.searchParams instanceof URLSearchParams) // true
    return urlObj.searchParams.get(key);
}

3. reduce

复制代码
const URL_SEARCH ='?source=baidupc_utmId_5100&plan=A005-qglrgmc&unit=a010-mp4&keyword=mp4zgif&keywordid=20210343653&bd_vid=7019318071742353099'
var urlObj = URL_SEARCH.slice(1) // 去掉第一个?号字符
.split('&')
.filter(Boolean)
.reduce((cur, val)=> {
    const idx = val.indexOf('=') // 获取第一个=号所在的下标
    cur[(val.substring(0, idx))] = encodeURIComponent(val.substring(idx+1));

    return cur;
}, {})
const getQuerySearchParams = (key) => urlObj[key]
console.log(getQuerySearchParams('unit'))

4. 正则

注意\w没有包含所有的字符, 发现比较特殊的添加一下并仔细验证一下!!!

复制代码
var url ='?source=baidupc_utmId_5100&plan=A005-qglrgmc&unit=a010-mp4&keyword=mp4zgif&keywordid=20210343653&bd_vid=7019318071742353099'
function getQuerySearchParams(key) {
    var obj = {};
    url.replace(/\??([\w-]+)=([\w-]+)&?/g, function(_, matchKey, matchValue) {
       if (!obj[matchKey]) {
        obj[matchKey] = matchValue;
       } else {
           var temp = obj[matchKey];
           obj[matchKey] = [].concat(temp, matchValue);
       }
    });
    if (!key) {
        return obj;
    } else {
        for (let ele in obj) {
            if (ele = key) {
                return obj[ele];
            }
        }
        return '';
    }
}
console.log(getQuerySearchParams('unit'))
相关推荐
To_OC1 小时前
从一头雾水到跑通全流程:我用一个周末啃透了JWT登录鉴权
前端·后端·http
excel3 小时前
研究 Vue 3 源码的收获
前端·vue.js
可乐鸡翅yeah_4 小时前
业务中 M3U8 水印相关坑,硬水印和动态水印区别
前端·网络·数据库·ffmpeg·m3u8在线
lerhxx5 小时前
AI 应用如何高效优雅地恢复中断?—— "连接解耦 + 状态持久化"
前端·javascript
计算机魔术师5 小时前
METR 演示 AI 智能体如何篡改 Inspect 评估记录以掩盖不当行为
前端
前端snow5 小时前
ai agent --- 异步处理之 Rabbit MQ
前端
念何架构之路5 小时前
zap扩展生态与总结
java·前端·数据库
独孤九剑打醒他6 小时前
【原创开源】【概念设计】源 - 栅 - 漏 - 栅 - 源 横向双栅 MOS,低压交流多值逻辑芯片探索
前端·其他·架构·开源·硬件工程
mantou1326 小时前
我给 AI Agent 做了个「油猴」:让 Claude Code / Codex 直接用你已登录的浏览器
前端·javascript·后端
默_笙6 小时前
🍕 一个主编、三个工种、两本手册:搭一支 AI 调研队
前端·javascript