Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   regex, выбрать текст из документа (https://javascript.ru/forum/misc/30293-regex-vybrat-tekst-iz-dokumenta.html)

trololo 30.07.2012 19:43

regex, выбрать текст из документа
 
имеется исходный документ содержащий вот такую структуру:
str<b><a href=''>str</a> </b><br/>
строка 1 которую нужно взять<br/> <br/>
str<b><a href=''>str</a> </b><br/>
строка 2 которую нужно взять<br/> <br/>
str<b><a href=''>str</a> </b><br/>
строка 3 которую нужно взять

<br/> <br/>
str<b><a href=''>str</a> </b><br/>
строка 4 которую нужно
<br/>взять<br/> <br/>

regex никогда не было моей сильной стороной, независимо от языка на котором писал. вот так пробую отсеять нужное
document.body.innerHTML.match(/<br>\s.*<br> <br>/gm)

на выходе имею
Array 
0 "<br> строка 1 которую нужно взять<br> <br>"
1 "<br> строка 2 которую нужно взять<br> <br>"
length 2

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

oneguy 30.07.2012 19:58

Объясните, пожалуйста, подробнее, по какому критерию нужно выбрать текст.

trololo 30.07.2012 20:03

нужно выбрать тест/html пл следующим признакам:
str<b><a href=''>str</a> </b><br/>
строка 1 которую нужно взять<br/> <br/>
str<b><a href=''>str</a> </b><br/>
строка 2 которую нужно взять<br/> <br/>
str<b><a href=''>str</a> </b><br/>
строка 3 которую нужно взять

<br/> <br/>
str<b><a href=''>str</a> </b><br/>
строка 4 которую нужно
<br/>взять
<br/> <br/>

то есть всё, что попадается между </b><br/>\s(тут может быть текст, теги img|a|br и переводы строк)<br/>\s<br/>\n

vadim5june 30.07.2012 20:20

var 
v=document.body.innerHTML;
var m=v.split('</b><br>');
for(var i=1;i<m.length;i++){alert(m[i].split('<br> <br>')[0])};

Deff 30.07.2012 20:23

trololo,
Их можно взять суммой - или обязательно массив по строкам ?

trololo 30.07.2012 20:32

вообще задача стоит в том, чтобы этот текст, который выделен, с помощью js вставить в span или div с уникальным id, для дальнейшей удобности, на том же месте (на сейчас вопрос не в этом), то есть получить на выходе

str<b><a href=''>str</a> </b><br/>
<div id="a[1]">строка 1 которую нужно взять</div><br/> <br/>
str<b><a href=''>str</a> </b><br/>
<div id="a[2]">строка 2 которую нужно взять</div><br/> <br/>
str<b><a href=''>str</a> </b><br/>
<div id="a[3]">строка 3 которую нужно взять

</div>
<br/> <br/>
str<b><a href=''>str</a> </b><br/>
<div id="a[4]">строка 4 которую нужно
<br/>взять
</div>
<br/> <br/>

я не извращенец, просто у меня нет доступа к серверной части приложения чтобы подправить верстку..

trololo 30.07.2012 20:35

Цитата:

Сообщение от vadim5june (Сообщение 193033)
var 
v=document.body.innerHTML;
var m=v.split('</b><br>');
for(var i=1;i<m.length;i++){alert(m[i].split('<br> <br>')[0])};

да, как-то о цикле я не думал, если с регуляркой не разберусь, то буду этот способ юзать..

Deff 30.07.2012 20:54

trololo,
Мало признаков

Выведите реальный кусок контента вместе с родителем - обрамлением, (Либо ссылку на страницу,
Данный пример - чисто помоечный вариант- без признаков индивидуальности - мон напрягацо скок угодно потом выбросить всё к черту

trololo 30.07.2012 21:41

Deff,
на самом деле это и есть фактически весь документ. родителем у всего этого этого выступает <td>, сам он содержит лишь то что я указал, за исключением того, что содержит немного другой текст и анкоры ссылок. ну что же, так и быть, всем спасибо за внимание буду использовать вариант предложенный товарисчем vadim5june.

Deff 30.07.2012 21:51

trololo,
td - это уже существенная вещь
второе
Это произвольный текст(Про выделенное цветом )?
str<b><a href=''>str</a> </b><br/>

Вам решения - еще и пытай Вас под ножом! Оно это нужно , никто не сидит с вами из помогающих за перегородкой и в курилке не обсуждали - термины и понятия разные, для мну пузырьковая камера - обиходное слово - вряд ли знакомое Вам...

trololo 30.07.2012 22:05

да, это произвольный текст.. я его сделал одинаковым, чтобы более понятна суть была, а оказалось наоборот всё запутал, извините..

Deff 30.07.2012 22:09

trololo,
jQuery - Применимо ?

trololo 30.07.2012 22:19

Deff,
нет, всё на «чистом» не хотелось бы ради только этого места подключать сторонние библиотеки..

Deff 30.07.2012 23:26

<table><tr>
<td id="test-test">
str<b><a href=''>str</a> </b><br/>
строка 1 которую нужно взять<br/> <br/>
str<b><a href=''>str</a> </b><br/>
строка 2 которую нужно взять<br/> <br/>
str<b><a href=''>str</a> </b><br/>
строка 3 которую нужно взять

<br/> <br/>
str<b><a href=''>str</a> </b><br/>
строка 4 которую нужно
взять<br/> <br/>
</td>
</tr></table>




<script type="text/javascript">
var str = document.getElementById('test-test').innerHTML;
alert(str)
var regexp = /<b><a(?:.(?!<\/a))+?.<\/a> <\/b><br ?[\/]?>([^(?:<br)]+)<br ?[\/]?> ?<br ?[\/]?>/igm;
var i=0;
function replacer(str,p1,offset, s){
i++;
 return str.replace(p1,'\n<div id="a['+i+']">'+p1+'</div>\n')
}
var matches = str.replace(regexp,replacer);

alert(matches);

document.getElementById('test-test').innerHTML=matches;
</script>

trololo 31.07.2012 00:48

Цитата:

Сообщение от Deff (Сообщение 193100)
В ИЕ6-7 пока не работает - там такая строка
[HTML]str<B><A href="">str</A> </B><BR>cтpoкa 1 кoтopyю нyжнo взять<BR><BR>str<B><A href="">str</A>
</B><BR>cтpoкa 2 кoтopyю нyжнo взять<BR><BR>str<B><A href="">str</A> </B><BR>cтpoкa 3 кoтopyю
нyжнo взять <BR><BR>str<B><A href="">str</A> </B><BR>cтpoкa 4 кoтopyю нyжнo взять<BR><BR>

спасибо огромное! ie вообще у меня не фигуриует, так что это не важно.

Deff 31.07.2012 11:21

trololo, Поправил

trololo 31.07.2012 18:14

Deff,
вообще красота, спасибо ещё раз!


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