获取地址栏参数 - queryString(正则表达式版本)
获取所有query string
function queryStringAll(src){ src = src || location.search || location.hash; var reg = /[?&]([^?&=]+)=([^?&=]*)/g, res, obj = {}; while(res = reg.exec(src)){ obj[res[1]] = res[2] == null ? undefined : decodeURIComponent(res[2]); } return obj; }
replace版本的会更简洁一些,replace做正则匹配,可以收集结果,比exec要简洁一些,详细的replace用法,可参考详解JS正则replace的使用方法
function queryStringAll(src){ src = src || location.search || location.hash; let res = {}; src.replace(/[?&]([^?&=]+)=([^?&=]*)/g, (rs,$1,$2) => { res[$1] = $2; }) return res; }
获取指定name的query string
function queryString(key,src){ src = src || location.search || location.hash; var reg = new RegExp('[?&]' + key + '=([^?&=]*)(?=&|$)'), match = reg.exec(src); return match == null ? null : decodeURIComponent(match[1]); }
现在已经不用考虑兼容IE,使用URLSearchParams是更简便的方法
let p = new URLSearchParams(location.search) p.get(参数名) let p = new URLSearchParams() p.set('a', 1) p.set('b', 2) p.toString() //得到 a=1&b=2,一个反转操作,可得到queryString
无需进行判断,URLSearchParams已经处理了边界情况