Используется сочетание разделения и соответствия регулярному выражению.
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, ""));
}
}
Возвращает ожидаемый результат, хотя одно регулярное выражение должно быть в состоянии выполнить все это.
// ["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"]