Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   RegExp дважды? (https://javascript.ru/forum/misc/4688-regexp-dvazhdy.html)

AlbusFalco 13.08.2009 15:37

RegExp дважды?
 
Вот такая строка:
<tr><td class="type">страна</td><td class=""><a href="http://localhost">США</a>, <a href="http://localhost">Россия</a></td></tr>

вместо localhost может быть любой другой адрес, стран может быть от 0 и до фига... надо чтоб названия стран попали в одну из групп регэкспа.
Код:

(?<=страна.*)(/">)(.*?)(<)<br>
вот такой регэксп подошел бы, но в JScript/VBScript RegExp нет просмотра назад...

Вобщем - как выполнить регэксп
Код:

(/">)(.*?)(<)
только для строки, в которой есть слово "страна"?

Kolyaj 13.08.2009 15:42

Цитата:

Сообщение от AlbusFalco
вот такой регэксп подошел бы, но в JScript/VBScript RegExp нет просмотра назад...

Фридл нам как бы говорит, что любое выражение можно построить без использования просмотра назад, и лично я с ним согласен.

В вашем же случае лучше использовать DOM-методы, ибо парсить регулярками innerHTML дело неблагодарное, innerHTML в разных браузерах разный.

AlbusFalco 13.08.2009 15:49

да я тоже уверен, что можно... просто не могу найти, КАК.
а насчет остального - требуется именно регэксп.

Riim 13.08.2009 15:56

Может сначала удалить все теги:
.replace(/<\/?[^>]+>/g, '')
?

Kolyaj 13.08.2009 15:56

Просто то, что слева, будет попадать в результаты поиска.

AlbusFalco 13.08.2009 16:06

так ведь строка то у меня не одна. мне надо сначала найти строку содержащую слово страна, а потом уже - отсеивать названия стран...
да и зачем теги удалять? я по ним и ориентируюсь в этом регэкспе.
вот скажем два, друг за другом прокатило б, но больно некрасиво и неэкономично:

1. (<tr><td class="type">страна.*)
2. (/">)(.*?)(<)

вопрос в том, как их сляпать в одну строку, чтоб все было одним запросом?

x-yuri 14.08.2009 08:33

Цитата:

Сообщение от AlbusFalco
а насчет остального - требуется именно регэксп.

это еще не доказано ;)

AlbusFalco 14.08.2009 08:44

Цитата:

Сообщение от x-yuri
это еще не доказано

я пишу standalone прогу на vb6 и ms vbscript regexp 5.5. Так как синтаксис регулярок последнего именно JScript'овый, я и спросил тут. Использовать встроенные средства не хочу, т.к. регэкспы, как шаблоны, удобнее сохранять извне, чтоб не перекомпилировать программу каждый раз под определенные сайты.

x-yuri 14.08.2009 09:15

Цитата:

Сообщение от AlbusFalco
регэкспы, как шаблоны, удобнее сохранять извне, чтоб не перекомпилировать программу каждый раз под определенные сайты

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

а почему бы не включить (?<=страна.*) в результат, т.е. не использовать просмотр назад

AlbusFalco 14.08.2009 09:31

не совсем понял... т.е. как это "включить (?<=страна.*) в результат"?
вот это - "?<=" вообще не обрабатывается в трансляторе регэкспов.
у меня что получается: одним регэкспом я могу ИЛИ выдернуть строку со словом "страна", ИЛИ выдернуть все содержимое тегов (/">)(.*?)(<) из всего документа. как я заметил - использование регэкспа вызывает всплеск загрузки процессора, поэтому использовать несколько штук подряд не очень бы хотелось, вот и ищу способ сделать все за один раз, одним запросом.


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