var str="foo bar "lorem ipsum" baz";
var results = str.match(/("[^"]+"|[^"\s]+)/g);
… returns the array you’re looking for.
Note, however:
- Bounding quotes are included, so can be removed with
replace(/^"([^"]+)"$/,"$1")
on the results. - Spaces between the quotes will stay intact. So, if there are three spaces between
lorem
andipsum
, they’ll be in the result. You can fix this by runningreplace(/\s+/," ")
on the results. - If there’s no closing
"
afteripsum
(i.e. an incorrectly-quoted phrase) you’ll end up with:['foo', 'bar', 'lorem', 'ipsum', 'baz']