Skip to content

获取并解析url参数 #3

Open
@BiYuqi

Description

@BiYuqi

获取并解析url参数

正则
/([^&]+)=([^&]+)/g
解释下

这里=是我们的锚点,以此为基础进行匹配

([^&]+) 匹配等号左边的字段
([^&]+) 匹配等号右边的字段,这里指获取下一个&之前所有的字段

在线调试

实战
// 随便找个带search的URL
const needToParse = `https://www.baidu.com/s?wd=%E5%8E%89%E5%AE%B3%E4%BA%86%EF%BC%8C%E7%89%9B%E5%8F%89666
&rsv_spt=1&rsv_iqid=0xc3aa1c4b000475f0&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=38&rsv_sug1=5&rsv_sug7=100&rsv_sug2=0
&inputT=464145&rsv_sug4=464269
&token=eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJuaW5naGFvLm5ldCIsImV4cCI6IjE0Mzg5NTU0NDUiLCJuYW1lIjoid2FuZ2hhbyIsImFkbWluIjp0cnVlfQ.SwyHTEx_RQppr97g4J5lKXtabJecpejuef8AqKYMAJc
&1-2-3=789`
/**
 * @return {} 返回 {key | value}的对象数据
 * @param {String} str 
 */
function parseUrlQuery(str) {
  const parseStr = str ? str.split('?')[1] : window.location.search.replace('?', '')
  const reg = /(\w+)=([^&]+)/g
  const res = {}
  let m

  while (m = reg.exec(parseStr)) {
    res[m[1]] = decodeURIComponent(m[2])
  }
  return res
}

测试

parseUrlQuery(needToParse)

{ 
  wd: '厉害了,牛叉666',
  rsv_spt: '1',
  rsv_iqid: '0xc3aa1c4b000475f0',
  issp: '1',
  f: '8',
  rsv_bp: '0',
  rsv_idx: '2',
  ie: 'utf-8',
  tn: 'baiduhome_pg',
  rsv_enter: '1',
  rsv_sug3: '38',
  rsv_sug1: '5',
  rsv_sug7: '100',
  rsv_sug2: '0\n',
  inputT: '464145',
  rsv_sug4: '464269\n',
 token:'eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJuaW5naGFvLm5ldCIsImV4cCI6IjE0Mzg5NTU0NDUiLCJuYW1lIjoid2FuZ2hhbyIsImFkbWluIjp0cnVlfQ.SwyHTEx_RQppr97g4J5lKXtabJecpejuef8AqKYMAJc' ,
'1-2-3': '789'
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions