Ouch, actually, it has a flaw, but I'm not sure you need a fix for that, but it's possible to fix it, if you want. It only checks for the double quotes, when it checks for the non-quoted words, but it checks for both single and double quoted groups of words. If you need both single and double quotes however, the expression is going to be a tid bit longer... but if you don't need, then it'd be shorter in fact:
/(".*[^"]")|(\s[^\s"]+(?!\s"))/g