首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于"&“的拆分字符串(url params字符串),同时允许并在param值中

基于"&“的拆分字符串(url params字符串),同时允许并在param值中
EN

Stack Overflow用户
提问于 2016-05-19 11:36:58
回答 4查看 69关注 0票数 0

我有一根绳子,像:

代码语言:javascript
复制
Id=bzat4e&Name=Gallery: Blitzer: Algebra & Trigonometry, 4e&Year=2016&Code=bzat4e

我想在&的基础上分割它,同时允许&在值内。

基本上,它是一个url参数字符串,我是根据我的JavaScript中的键获取值的。

代码语言:javascript
复制
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"]
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-05-19 11:39:16

您可以使用斯普利特(将其作为数组来获取。

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

若要将数组转换为对象,请使用减少()

代码语言:javascript
复制
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);

对于旧浏览器,请检查reduce()方法的多填充选项

Regex解释

票数 2
EN

Stack Overflow用户

发布于 2016-05-19 11:46:06

编辑:不知道为什么我之前没有想到这一点:

代码语言:javascript
复制
var arr = paramList.split(/\b&\b/);

在下面试一试:

代码语言:javascript
复制
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);

票数 1
EN

Stack Overflow用户

发布于 2016-05-19 11:53:02

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

代码语言:javascript
复制
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"]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37322038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档