我有一个字符串:
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"]
答案 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。
答案 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编辑器。