var str = 'single words "fixed string of words"';
var astr = str.split(" "); // need fix
Я хотел бы, чтобы массив был похож на это:
var astr = ["single", "words", "fixed string of words"];
str.match(/\w+|"[^"]+"/g)
//single, words, "fixed string of words"
Здесь используется смесь разделения и регексного сопоставления.
var str = 'single words "fixed string of words"';
var matches = /".+?"/.exec(str);
str = str.replace(/".+?"/, "").replace(/^\s+|\s+$/g, "");
var astr = str.split(" ");
if (matches) {
for (var i = 0; i < matches.length; i++) {
astr.push(matches[i].replace(/"/g, ""));
}
}
Это возвращает ожидаемый результат, хотя один regexp должен быть в состоянии сделать все это.
// ["single", "words", "fixed string of words"]
Обновление А это улучшенная версия метода, предложенного S.Mark
var str = 'single words "fixed string of words"';
var aStr = str.match(/\w+|"[^"]+"/g), i = aStr.length;
while(i--){
aStr[i] = aStr[i].replace(/"/g,"");
}
// ["single", "words", "fixed string of words"]