基于“&”拆分字符串(url params字符串)同时允许&在参数值

时间:2016-05-19 11:36:58

标签: javascript regex string split

我有一个字符串:

Id=bzat4e&Name=Gallery: Blitzer: Algebra & Trigonometry, 4e&Year=2016&Code=bzat4e

我希望在&的基础上拆分它,同时允许&内部值。

基本上它是一串url参数,我在JavaScript中基于key获取值。

I/P 
var paramList = Id=bzat4e&Name=Gallery: Blitzer: Algebra & Trigonometry, 4e&Year=2016&Code=bzat4e

O/P
[Id="bzat4e", Name="Gallery: Blitzer: Algebra & Trigonometry, 4e", Year="2016", Code="bzat4e"]

4 个答案:

答案 0 :(得分:2)

您可以使用 split() 将其作为数组



var str = 'Id=bzat4e&Name=Gallery: Blitzer: Algebra & Trigonometry, 4e&Year=2016&Code=bzat4e';
var res = str.split(/&(?=[^=&]+=)/);
console.log(res);




要将数组转换为对象,请使用 reduce()



var str = 'Id=bzat4e&Name=Gallery: Blitzer: Algebra & Trigonometry, 4e&Year=2016&Code=bzat4e';
var res = str.split(/&(?=[^=&]+=)/).reduce(function(a, b) {
  var spl = b.split('=');
  a[spl[0].trim()] = spl[1];
  return a;
}, {});
console.log(res);




旧浏览器检查polyfill option for reduce() method

Regex explanation here

Regular expression visualization

答案 1 :(得分:1)

编辑:不确定为什么我之前没有想到这个:

var arr = paramList.split(/\b&\b/);

尝试下面的内容:

var paramList = "Id=bzat4e&Name=Gallery: Blitzer: Algebra & Trigonometry, 4e&Year=2016&Code=bzat4e";

var arr = paramList.split(/\b&\b/);
var finalArr = [];

arr.forEach(function(pair) {
  var values = pair.split('=');
  var key = values[0];
  var value = values[1];
  var obj = {};
  obj[key] = value;
  finalArr.push(obj);
});

console.log(arr);

console.log(finalArr);

答案 2 :(得分:1)

使用String.split函数的特定输入字符串的解决方案:

var str = "Id=bzat4e&Name=Gallery: Blitzer: Algebra & Trigonometry, 4e&Year=2016&Code=bzat4e",
    result = str.split(/(?!\s)[&](?!\s)/);

// now result contains 4 items
console.log(result);  // ["Id=bzat4e","Name=Gallery: Blitzer: Algebra & Trigonometry, 4e","Year=2016","Code=bzat4e"]

答案 3 :(得分:1)

您可以使用RegEx来分割字符串,例如 -

$scope.ChangeAction = function(data) { }

这会根据“&”分割你的字符串字符,只要它周围没有空格。

查看RegEx101以获取简单的在线RegEx编辑器。