You can change your regex to:
keywords = keywords.match(/\w+|"(?:\\"|[^"])+"/g);
Instead of [^"]+
you’ve got (?:\\"|[^"])+
which allows \"
or other character, but not an unescaped quote.
One important note is that if you want the string to include a literal slash, it should be:
keywords="pop rock "hard rock" "\\"dream\\" pop""; //note the escaped slashes.
Also, there’s a slight inconsistency between \w+
and [^"]+
– for example, it will match the word "ab*d"
, but not ab*d
(without quotes). Consider using [^"\s]+
instead, that will match non-spaces.