- 1.split方法截取
const getParams = (url) => {
let res = new Map(null);
if (url) {
let hasParams = url.indexOf("?");
if (hasParams > -1) {
let paramsStr = url.substr(hasParams + 1);
let paramsArr = paramsStr.split("&");
paramsArr.forEach((ele) => {
let [a, b = ""] = ele.split("=");
res.set(a, b)
});
}
}
// 闭包缓存res的值
return (key) => {
if (!key) {
return res
}
return res.get(key) || null
}
};
const urlMap = getParams("http://localhost:8081/?a=1&b=2&c=3")
console.log(urlMap('a')) // '1'
console.log(urlMap(''))
/**
Map
0: {"a" => "1"}
1: {"b" => "2"}
2: {"c" => "3"}
*/
- 市面上老生常谈的正则截取字段
let getParamsByReg = (url, name) => {
if (!url) {
return null;
}
let reg = new RegExp(`(\\?|^|&)${name}=([^&]*)(&|$)`, 'i'); // 第二个参数 i 代表不区分大小写 g 代表全局检索并只匹配一次 m代表多行匹配(TODO)
let res = url.match(reg);
if (res) {
return res[2]
}
return null;
}
console.log(getParamsByReg("http://localhost:8081/?a=1&b=2&c=3",'B')); // '2'
new RegExp 实例化的第二个参数 i 代表不区分大小写 g 代表全局检索并只匹配一次 m代表多行匹配
(^|&) 代表字符串开头或以&开头
([^&]*) 代表非&的所有字符串
(&|$) 代表以&结尾或字符串结束