Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   регулярные выражения - извлечение текста "без мусора" (https://javascript.ru/forum/misc/56700-regulyarnye-vyrazheniya-izvlechenie-teksta-bez-musora.html)

Cache 30.06.2015 00:22

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

Есть текст:
Код:

<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> и %

ksa 30.06.2015 08:28

Цитата:

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

Как вариант...

var str='<td>Наличие<br>Рис фасованный: 5%<br>Гречка весовая: 36%<br>Морковка гнилая: 15%<br>Итого.....';
alert(str.match(/<br>([\s\S]*?(?=%))/g));

Останется только убрать
<br>

рони 30.06.2015 08:35

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


Часовой пояс GMT +3, время: 13:01.