Задать вопрос

Как с помощью регулярных выражений прийти к такому результату?

source str:
<!DOCTYPE html>
<html>
<head>
	<title></title>
</head>
<body>
	<div class="list">
		<div class="item">
			<div class="name">text</div>
			<div class="price">text</div>
			<div class="description">text</div>
		</div>
		<div class="item">
			<div class="name">text</div>
			<div class="price">text</div>
			<div class="description">text</div>
		</div>
	</div>
</body>
</html>

result arr:
["<div class="item">
	<div class="name">text</div>
	<div class="price">text</div>
	<div class="description">text</div>
</div>","<div class="item">
	<div class="name">text</div>
	<div class="price">text</div>
	<div class="description">text</div>
</div>"]


Пробовал такой вид: /<div class="item">(.+?)<\/div>/g, но он не работает там где есть переносы строк и табуляция. Найдется объяснение?
  • Вопрос задан
  • 268 просмотров
Подписаться 3 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 3
NaN
@NaN
Даже если добавить нужный флаг /gm, то получите до первого закрывающего.

htm.match(/<div class="item">(.+?)<\/div>/gm);
/*["<div class="item">      <div class="name">text</div>", 
"<div class="item">      <div class="name">text</div>"]*/


Вам точно нужна регулярка?
Почему бы не воспользоваться DOM?
var className = 'item', 
items = {"dom": document.getElementsByClassName(className), "text": []};
for(var item in items.dom) items.text.push(items.dom[item].outerHTML);
Ответ написан
Комментировать
qork
@qork
{ background: #F00B42 }
Можно сделать без регулярок.
var arr = [];
$('.list .item').each(function(){
  arr.push('<div class="item">'+$(this).html()+'</div>');
});
Ответ написан
@asperin2
PHP разработчик
Скорее всего поможет модификатор s.
/<div class="item">(.+?)<\/div>/s
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы