2017-03-07 150 views
1

我有这个字符串。将字符串拆分为一个对象javascript

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

有没有把它转换成一个对象的好方式,也应该是这样的:我正在寻找在纯JavaScript的解决方案

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

+0

你能告诉我们一个'bad'办法做到这一点? –

+0

即使我们可以得到一个类似于[“pen penapple”,“apple”,“pen”,“pen pen”]的数组,我可以完成剩下的工作。 –

+0

@TânNguyễn这就是我目前正在尝试。但我希望有些人会想出一条捷径。 –

回答

1

有引号分割字符串...

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); 
0

这可能不是最有效的功能,但确实你需要什么(返回数组)

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; 
}