2012-03-18 3 views
1

Мне нужна помощь с регулярными выражениями в JavaScript (извините, я все еще пытаюсь это изучить).JavaScript RegExp Three Parts

У меня есть строка: value1 value2 (value3 value4) -value5 value6 (. Может иметь бесконечные значения в каждой из трех частей)

И мне нужно отделить:

var1 = value1 + ' ' + value2 ... 
var2 = value3 + ' ' + value4 ... 
var3 = value5 + ' ' + value6 ... 

Можете ли вы помочь мне с этим ? Благодаря!

+0

Можете ли вы привести пример более входных и ожидаемых результатов? – Dogbert

ответ

2

Расщепление может быть идея, если форматирование строки остается, как данный формат:

'value1 value2 (value3 value4) -value5 value6'.split(/\s+\(|\)\s+\-/); 
//=> ["value1 value2", "value3 value4", "value5 value6"] 
+0

Отлично! Но первое значение имеет пробел в конце строки. Есть идеи для этого? jQuery.trim()? –

+0

Привет, Кайо, рад, что смогу помочь. Я отредактировал ответ, разделение теперь также удаляет пространство. – KooiInc

1

Поскольку исходная строка уже содержит эти космические разделители, попробуйте:

/^(.*) \((.*)\) -(.*)$/.exec(str); 

Это соответствует строке "anything (anything) -anything".

Он возвращает массив, из которых arr[1], arr[2] и arr[3] содержат три результата.

Обратите внимание, что значения не имеют специальных символов в них (например, ( или - с добавленным пространством), в противном случае формат на самом деле не определен.

1
var str1 = "value1 value2 (value3 value4) -value5 value6"; 

//var parts = str1.match(/^([^(]+)\(\s?([^)]+)\)\s?(.+)$/); 
var parts = str1.match(/^([^(]+)\(\s?([^)]+)\)\s?-(.+)$/); 

var var1 = parts[1]; 
var var2 = parts[2]; 
var var3 = parts[3]; 

console.log(var1); 
console.log(var2); 
console.log(var3); 
+0

Думаю, вам, возможно, понадобится включить тире. – pimvdb

+0

подумал, что это был отрицательный..lol – epascarello

1

Я бы идти о поиске каждую часть первую, а затем разделить значения в каждой для большей эффективности , Затем я буду придерживаться их вместе, используя одно пространство. Я использовал много \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* возможные пустые пространства
  • $ конец строки