Показать сообщение отдельно
  #1 (permalink)  
Старый 30.06.2015, 00:22
Кандидат Javascript-наук
Отправить личное сообщение для Cache Посмотреть профиль Найти все сообщения от Cache
 
Регистрация: 02.05.2013
Сообщений: 111

регулярные выражения - извлечение текста "без мусора"
Доброго времени суток.

Есть текст:
Код:
<td>Наличие<br>Рис фасованный: 5%<br>Гречка весовая: 36%<br>Морковка гнилая: 15%<br>Итого.....
соответственно, хочу вычленить то что между тегами <br> и заканчивающееся на знак %
но получаю:
либо последний извлеченный элемент Морковка гнилая: 15:
var str='<td>Наличие<br>Рис фасованный: 5%<br>Гречка весовая: 36%<br>Морковка гнилая: 15%<br>Итого.....';
alert(str.match(/(?:(?:<br>)(.*?)%)+/i));

либо, всю строку начиная с <br>Рис и заканчивая Морковка гнилая: 15%:
var str='<td>Наличие<br>Рис фасованный: 5%<br>Гречка весовая: 36%<br>Морковка гнилая: 15%<br>Итого.....';
alert(str.match(/((?:(?:<br>)(?:.*?)%)+)/i));


Подскажите пожалуйста, как правильно составить данное рег. выражение, с учетом того, что количество искомых фраз может разниться?


З.Ы.: можно, конечно, сделать так:
var str='<td>Наличие<br>Рис фасованный: 5%<br>Гречка весовая: 36%<br>Морковка гнилая: 15%<br>Итого.....';
alert(str.split('<br>'));
но тогда в результат попадает лишний мусор, которого хотелось бы избежать

З.Ы.Ы.: естественно - можно использовать модификатор g:
var str='<td>Наличие<br>Рис фасованный: 5%<br>Гречка весовая: 36%<br>Морковка гнилая: 15%<br>Итого.....';
alert(str.match(/(?:(?:<br>)(.*?)%)/gi));

но проблема в том, что далее идет аналогичная конструкция, только получающая данные уже иначе и соответственно вместе они не работают при установленном параметре g т.к. они не чередуются а идут друг за другом
к тому же, при использовании g, в тексте останутся <br> и %

Последний раз редактировалось Cache, 30.06.2015 в 01:19. Причина: добавление З.Ы.Ы.
Ответить с цитированием