Кажется понял.
var str = 'hello "Java"';
alert(str.match(/a|"([^"]*)"/));
При выборке он проверяет каждый символ в строке и для каждого символа выполняет условие
или. То есть вначале он проверяет
h(если символ соответствует первому условию то записывает в массив, если нет то проверяет второе условие) затем
e и так далее. То есть по очередности для каждого символа, а не первое условие на всю строку а затем второе условие на всю строку. Я все правильно понял?