Я бы идти о поиске каждую часть первую, а затем разделить значения в каждой для большей эффективности , Затем я буду придерживаться их вместе, используя одно пространство. Я использовал много \s*
'es, потому что я предполагаю, что может быть несколько пробелов (например, в прокомментированной строке).
var str = 'value1 value2 (value3 value4) -value5 value6';
//var str = ' value1 value2 ( value3 value4) -value5 value6 ';
var pairs = str.match(/^\s*(.+?)\s*\(\s*(.+?)\s*\)\s*(.+?)\s*$/);
values1 = pairs[1].split(/\s+/);
values2 = pairs[2].split(/\s+/);
values3 = pairs[3].split(/\s+/);
console.log('values1:',values1,'-->',values1.join(' '));
console.log('values2:',values2,'-->',values2.join(' '));
console.log('values3:',values3,'-->',values3.join(' '));
Объяснение RegEx
^
начало строки
\s*
возможные пустые пространства
(.+?)
персонаж группы (по крайней мере, один символ)
\s*
возможные пустые пространства
\(
открытие скобки
\s*
возможные пустые пространства
(.+?)
персонаж группа (по крайней мере, один символ)
\s*
возможных пустые пространства
\)
закрытие скобок
\s*
возможных пустые пространства
(.+?)
группа символов (не менее 1 символа)
\s*
возможные пустые пространства
$
конец строки
Можете ли вы привести пример более входных и ожидаемых результатов? – Dogbert