正则切分url的参数

需求:

let str = 'a=111&b=222&c=333'

想要的是 a=111 、b=222这个字段,不要用split,脚本特殊

自己大概写了一下 但是没有实现

/a=[0-9]*[^&]/
阅读 4.4k
7 个回答

我来说下原理:
第一: 匹配出所有的不包含'&'的字符串
第二: 这个串不包含 ""空字符串

let str = 'a=111&b=222&c=333'
let reg = /[^\&]+/g;
console.log(str2.match(reg))

clipboard.png

  1. [a-z_$][a-z_$0-9]*代表key的规则,字母、下划线、$打头,后面可以跟字母、数字、下划线、$
  2. =代表key=value中的分隔符
  3. [^&]*代表所有不是&分隔符的都选中,当然也可以是空。

当然,对于你这种需求,/[^&]+/g也是不错的。不是&的就是一组数据
clipboard.png

function getQuery (str) {
  var res = {}
  var href = ''; try { href = window.location.href } catch (e) {};
  (str!==null && typeof str!=='undefined' ? str : href).replace(/[^=?&]*=[^=&?]*/g, function (g) {
    res[decodeURIComponent(g.replace(/=.*/g, ''))] = decodeURIComponent(g.replace(/.*=/g, ''))
  });
  return res
}


getQuery('a=12&b=456') // => {a: "12", b: "456"}

(\w+)=([^&]*)

clipboard.png

如果对兼容性要求不高,可以考虑原生方法:

let instance = new URLSearchParams('a=111&b=222&c=333')

instance.get('a')
"111"
instance.get('b')
"222"
instance.get('c')
"333"

MDN

@gauseen

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题