Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   парсинг html-строки? Рег выражения? (https://javascript.ru/forum/misc/29459-parsing-html-stroki-reg-vyrazheniya.html)

JDev 28.06.2012 15:01

парсинг html-строки? Рег выражения?
 
Здравствуйте, мне нужно парсить вот такую строку,
<map id="test" name="test">
<area shape="poly" coords="1583,172,1589,172,1589,178,1583,178,1583,172,1583,172" title="Line1: (29.04.01 06:00, 18,738)" alt="" nohref="nohref"/>
<area shape="poly" coords="1330,152,1336,152,1336,158,1330,158,1330,152,1330,152" title="Line1: (29.04.01 05:00, 20,279)" alt="" nohref="nohref"/>
<area shape="poly" coords="1077,133,1083,133,1083,139,1077,139,1077,133,1077,133" title="Line1: (29.04.01 04:00, 21,814)" alt="" nohref="nohref"/>
<area shape="poly" coords="824,114,830,114,830,120,824,120,824,114,824,114" title="Line1: (29.04.01 03:00, 23,345)" alt="" nohref="nohref"/>
</map>
<map id="test" name="test">
<area shape="poly" coords="571,94,577,94,577,100,571,100,571,94,571,94" title="Line1: (29.04.01 02:00, 24,869)" alt="" nohref="nohref"/>
<area shape="poly" coords="318,75,324,75,324,81,318,81,318,75,318,75" title="Line1: (29.04.01 01:00, 26,387)" alt="" nohref="nohref"/>
<area shape="poly" coords="66,56,72,56,72,62,66,62,66,56,66,56" title="Line1: (29.04.01 00:00, 27,899)" alt="" nohref="nohref"/>
</map>


отсюда мне нужно получить например массив или строку, которая содержыт только элементы

<area shape="poly" coords="824,114,830,114,830,120,824,120,824,114,824,114" title="Line1: (29.04.01 03:00, 23,345)" alt="" nohref="nohref"/>


почитал про "рег выражения" - кажется самый хороший вариант.
но что-то пока не приходят мысли как это сделать.
Может кто подскажет?
Спасибо.

devote 28.06.2012 15:13

var str = '<map id="test" name="test">\
<area shape="poly" coords="1583,172,1589,172,1589,178,1583,178,1583,172,1583,172" title="Line1: (29.04.01 06:00, 18,738)" alt="" nohref="nohref"/>\
<area shape="poly" coords="1330,152,1336,152,1336,158,1330,158,1330,152,1330,152" title="Line1: (29.04.01 05:00, 20,279)" alt="" nohref="nohref"/>\
<area shape="poly" coords="1077,133,1083,133,1083,139,1077,139,1077,133,1077,133" title="Line1: (29.04.01 04:00, 21,814)" alt="" nohref="nohref"/>\
<area shape="poly" coords="824,114,830,114,830,120,824,120,824,114,824,114" title="Line1: (29.04.01 03:00, 23,345)" alt="" nohref="nohref"/>\
</map>\
<map id="test" name="test">\
<area shape="poly" coords="571,94,577,94,577,100,571,100,571,94,571,94" title="Line1: (29.04.01 02:00, 24,869)" alt="" nohref="nohref"/>\
<area shape="poly" coords="318,75,324,75,324,81,318,81,318,75,318,75" title="Line1: (29.04.01 01:00, 26,387)" alt="" nohref="nohref"/>\
<area shape="poly" coords="66,56,72,56,72,62,66,62,66,56,66,56" title="Line1: (29.04.01 00:00, 27,899)" alt="" nohref="nohref"/>\
</map>';

var res = str.match( /(<area(?:[^>]*)>)/ig );
alert( res.join( "\n\n" ));

tadjik1 28.06.2012 15:19

да ну ладно вам, это же классика. нельзя использовать регулярки для парсинга хтмл!

var map = document.getElementsById('test');
var areas = map.getElementsByTagName('area');

JDev 28.06.2012 15:48

devote - пасиб, работает


Цитата:

Сообщение от tadjik1 (Сообщение 184886)
да ну ладно вам, это же классика. нельзя использовать регулярки для парсинга хтмл!

var map = document.getElementsById('test');
var areas = map.getElementsByTagName('area');

- я строку получаю с сервера, поэтому мне кажется - рег выражение, самое то. У меня нету этого елемента в dom.

tadjik1 28.06.2012 16:04

Цитата:

Сообщение от JDev
я строку получаю с сервера, поэтому мне кажется - рег выражение, самое то. У меня нету этого елемента в dom.

скорее всего эта строка уже и есть XMLDocument, а у него есть методы getElementsById и getElementsByTagName. попробуйте

UPD. ну а если совсем не нравится, то можно вот так: http://www.w3schools.com/xml/xml_parser.asp
только не регулярками)))

JDev 28.06.2012 16:35

Цитата:

Сообщение от tadjik1 (Сообщение 184927)
скорее всего эта строка уже и есть XMLDocument, а у него есть методы getElementsById и getElementsByTagName. попробуйте

UPD. ну а если совсем не нравится, то можно вот так: http://www.w3schools.com/xml/xml_parser.asp
только не регулярками)))

- я не писал такое с чего вы взяли это? Я получаю эту строчку как (сookie) с сервера(на томкате мною написанный сервлет который по запросу. выдает клиенту определенную map).
бррррр и откуда у меня xml? Я видимо не понимаю на какую мысль вы меня хотите навести. :)

lord2kim 28.06.2012 16:41

Цитата:

Сообщение от JDev (Сообщение 184952)
- я не писал такое с чего вы взяли это? Я получаю эту строчку как (сookie) с сервера(на томкате мною написанный сервлет который по запросу. выдает клиенту определенную map).
бррррр и откуда у меня xml? Я видимо не понимаю на какую мысль вы меня хотите навести. :)

если использовать линк tadjik1, то вы тем самым преобразуете эту строку в XML-фрагмент...и сможете работать с ней обычными методами...
или добавить данный фрагмент при получении в какой-нибудь невидимый div на странице и работать как с частью DOM...

devote 28.06.2012 16:42

tadjik1,
да какая тебе разница как человек обрабатывает строку.. Человек попросил решения, ему его дали. Попросил бы решения распарсить XML получил бы решения того как это делается..

JDev 28.06.2012 16:51

devote - пасиб за понимание. :):victory:

JDev 28.06.2012 16:52

lord2kim - пасиб за объяснение.


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