将string拆分为一个对象的JavaScript

我有这个string。

'"pen pineapple" apple pen "pen pen"' 

有没有一种很好的方法将其转换为如下所示的对象:

 { a: "pen pineapple", b: "apple", c: "pen", d: "pen pen" } 

我正在寻找纯JavaScript的解决scheme!

分割带引号的string…

https://stackoverflow.com/a/18647776/2725684

然后将该数组转换为一个对象…

https://stackoverflow.com/a/4215753/2725684

所以,当你结合这些答案,看起来像这样…

 var myRegexp = /[^\s"]+|"([^"]*)"/gi; var myString = '"pen pineapple" apple pen "pen pen"'; var myArray = []; do { var match = myRegexp.exec(myString); if (match != null) { myArray.push(match[1] ? match[1] : match[0]); } } while (match != null); var obj = myArray.reduce(function(acc, cur, i) { acc[i] = cur; return acc; }, {}); console.log(obj); 

您可以使用适配版本的分割string(逗号),但忽略使用JavaScript的双引号内的逗号,并使用Number#toString方法作为键。

 var str = '"pen pineapple" apple pen "pen pen"', arr = str.match(/(".*?"|[^" \s]+)(?=\s* |\s*$)/g), object = {}; arr.forEach(function (a, i) { object[(i + 10).toString(36)] = a.replace(/"/g, ''); }) console.log(object); 

这可能不是最有效的function,但你需要(返回数组)

 function splitter(inputString) { var splitted = inputString.split(' '); var out = [] var temp = ""; var quoteStarted = false; for (i = 0; i < splitted.length; i++) { if (splitted[i].indexOf('"') > -1 && !quoteStarted) { temp += splitted[i] + " "; quoteStarted = true; } else if (quoteStarted && splitted[i].indexOf('"') == -1) { temp += splitted[i] + " "; } else if (quoteStarted && splitted[i].indexOf('"') > -1) { temp += splitted[i]; out.push(temp); quoteStarted = false; temp = ""; } else { out.push(splitted[i]) } } return out; }