js获取url参数

256 阅读1分钟
  • 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代表多行匹配
(^|&) 代表字符串开头或以&开头
([^&]*) 代表非&的所有字符串
(&|$) 代表以&结尾或字符串结束