parsings strings: extracting words and phrases [JavaScript]

javascript, parsing, regex

Solution

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` and `ipsum`, they'll be in the result. You can fix this by running `replace(/\s+/," ")` on the results.

- If there's no closing `"` after `ipsum` (i.e. an incorrectly-quoted phrase) you'll end up with: `['foo', 'bar', 'lorem', 'ipsum', 'baz']`

Problem

I need to support exact phrases (enclosed in quotes) in an otherwise space-separated list of terms. Thus splitting the respective string by the space-character is not sufficient anymore. Example: ``` input : 'foo bar "lorem ipsum" baz' output: ['foo', 'bar', 'lorem ipsum', 'baz'] ``` I wonder whether this could be achieved with a single RegEx, rather than performing complex parsing or split-and-rejoin operations. Any help would be greatly appreciated!

Original source