Обрезать HTML!
Коллеги, доброго времени суток, парюсь с регулярками, прошу помощи.
Есть строка в виде html документа: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <header> <div class="log">123</div> <nav>...</nav> </header> <main> <!-- some content --> </main> <footer> <p> Lorem ipsum dolor sit amet, consectetur adipisicing elit. Non neque ab qui soluta harum consequuntur earum facilis. Pariatur, quia optio iste, excepturi corporis nesciunt, consequuntur, exercitationem incidunt labore eius voluptas. </p> <a href="#"></a> </footer> </body> </html> надо из него вырезать все, вокруг тега main, т.е. остается только: let str = `<main><!-- some content --></main>`; Заранее благодарствую. |
Цитата:
var str='Лишний текст ... <main><!-- some content --\></main> ... продолжение лишнее'; alert(str.match(/<main>.*<\/main>/)); |
ksa, да спасибо
|
ksa, беда, не оно(((
Вот входная строка:
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="robots" content="noindex">
<meta name="X-Robots-Tag" content="noindex">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1">
</head>
<body data-country="">
<header role="banner" class="nav-header">
</div>
</div>
<title>Ticket de RAPIPAGO</title>
</header>
<div class="ticket-box ticket-box-c2">
/--------------------------------------------------------------- от сюда
<div class="payment-info-container-c2">
<div class="header-ticket">
<!-- incluye el header del ticket -->
<div class="ticket-header">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAnYAAACqCAYAAAAgNwKEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAPzxJREFUeNrsnU+MFNe97w+ECOfKwBDZ9wpIrhtHNwZnwWAnbGyLRmZlxWJmESm2FBgi2VkEBZAj+fI2M7MJshQLJvJb3ESCGSLZvspiBtnXKywa2dmQODSLxMRPgfbj2ujFVhiMdYMVJX71rTpnpqa6qrrOn/rb36/UHgzT3VXnnKrzqd/fVZ9//rmgKIqiKIqi6q9VBDuKoiiKoiiCHUVRFEVRFEWwoyiKoiiKogh2FEVRFEVRFMGOoiiKoihq6MFu1apVHKmStO2h50e9HyPyf9uhf7rPe7Uiv47fG8340Yveqxvz9/i7WzG/07vyuxd6nBGKoiiKKkeZmI1gVzq4tUNAtkH+1AG0oqVgDz8vh/6f4EdRFEVRBLuhAriWfO0O/blp6oSgr0PgoyiKoiiCXd0hDtY2gNwOEVjeRod8SJRV74L82fFgb5ErhaIoiqIIdlUEubYEud1iZRycU/1j7Vpx5557lv7/f7Zsif29pL9X+uLt2+KLn3wy8O//6YMP7e11Dg6wnVJDrUxFt2AaEogh03+KrCHeLtyk6Sm/Xm/CAnhCLYNQP6FOCpnzvEcoZVlZI1OiGAe18sW+IWmalKUU7ADtfUUUJd4XOD++zpEu+3hDqKYDeE8BeFvJZITtzYMeDpExB2awC8+WLsG0U5g4dBgfq4Lmfofi1tfnDPnBfFe1IYS0kR7CiKoigqJ8BThYXzds0C4A+mFjqmKIIdRVEURVnDneoccTgHwIO7fcZ7nWQBYopgR1EURVHFQp6rLkRdCXQLBDqKYEdRFEVR5UMe4pxVhQMVy9wS/fHOnRDMXRZBsekeB5CqDNhRFEVRFEVR1RfBjqIoiqIoimBHURRFURRFEewoiqIoiqIogh1FURRFURRFsKMoiqIoimq0/r8AAwA8zR5enm5XSAAAAABJRU5ErkJggg==" height="27">
</div>
</div>
<div>
<div class="principal-info">
<!-- informacion propia del ticket -->
<h1 class="payment-info">Solo te queda pagar $ 156,00 en tu sucursal de Rapipago más cercana</h1>
<p>Díctale estos números al cajero:</p>
<div class="payment-secondary-info"></div>
<div class="payment-code-c2">
<span>2084</span><span>0846</span>
</div>
<br />
<p>Tienes hasta el 19/08/2019 para hacerlo.</p>
<!-- incluye el div concepto -->
<div class="rapipago-item-time-accreditation item-time-accreditation">
<i class="ch-icon-time"></i> Acreditaci�n inmediata.
</div>
<!-- incluye el barcode -->
<div class="payment-barcode">
<img src="data:image/png;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a
HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy
MjIyMjIyMjIyMjv8A3H13/wAbf+Rn13/sVLf/ANOUdcBqP/Mx/wDYqaV/7j67/wCN
v/Iz67/2Klv/AOnKOgA+IH/NYv8AuC/+y0f/AD1aPiB/zWL/ALgv/stH/wA9WgA07/k4Xw5/3Ff/
AEr1CsCx/wCQH8FP+wrcf+lsdb+nf8nC+HP+4r/6V6hWBY/8gP4Kf9hW4/8AS2OgDn/AP/IseIv+
B/8Apt1KvX5f+Sh+PP8AsK+G/wD0bFXkHgH/AJFjxF/wP/026lXr8v8AyUPx5/2FfDf/AKNioAPi
Z/yTz4k/9hW0/wDRVjXAaV/yHNK/7CvhT/0ieu/+Jn/JPPiT/wBhW0/9FWNcBpX/ACHNK/7CvhT/
ANInoA39R/5OF8R/9wr/ANK9Pr0D4Jf8kh0L/t4/9KJK8/1H/k4XxH/3Cv8A0r0+vQPgl/ySHQv+
3j/0okoA9AooooA//9k=" width="300px">
<span>6001908196005001966315040000208408450000156006</span>
</div>
<p class="rapipago-msg_after">Este comprobante es válido para pagar en los locales de la Red Rapipago en todo el país.</p>
</div>
<input id="payment-detail-widget" class="payment-detail-widget" type="checkbox" checked/>
<div class="div-concept">
<label for="payment-detail-widget">
<span>Concepto</span>
</label>
<div class="ch-expandable-container purchases-expandable-container-c2" aria-expanded="true">
<div class="payment-container-c2">
<p class="buyed"><span></span>Compraste</p>
<p class="payment-reason-c2">Awesome Bronze Shoes</p>
<p class="payment-price-c2"><strong class="ch-price">$ 156,00</strong></p>
</div>
</div>
</div>
</div>
<div class="more-info">
<!-- incluye el boton imprimir -->
<a class="payment-button-print btn-ticket" onclick="javascript:top.focus();
window.print()" href="#">Imprimir</a>
</div>
</div>
/------------------------------------до сюда
<br/>
</div>
<footer role="contentinfo" class="nav-footer">
<div class="nav-bounds">
<div class="nav-footer-primaryinfo">
</div>
</footer>
<script type="application/javascript">
</script>
</body>
</html>
нужно получить то что я выделил дефисами в коде, вроде бы правильное было решение у вас, но тут не работает оно. please help!!! Заранее благодарю |
Роман Андреевич, можно использовать тот факт, что нужный тебе кусок начинается с
<div class="ticket-box ticket-box-c2"> и заканчивается <br/> </div> <footer role="contentinfo" class="nav-footer"> Условно назову их левой и правой скобками... Т.о. твое решение может выглядеть так var str='Лишний текст ... левая скобка<!-- some content --\>правая скобка ... продолжение лишнее'; alert(str.match(/левая скобка(.*)правая скобка/)[1]); |
Роман Андреевич, посмотрел я еще раз твою "строку"...
Оказывается тебе нужно содержимое <div class="ticket-box ticket-box-c2"> ... </div> Т.о. тебе и регулярка не нужна. :no: Получай данные как html и работай с ними стандартными методами
obj=html.querySelector('.ticket-box.ticket-box-c2');
|
Роман Андреевич, поместил твой текст в файл tmp1.csp...
Правда он был не валидный. :( Один ДИВ был не закрыт, я закрыл... Вот еще один вариант решения. ;)
<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<script src='https://code.jquery.com/jquery-latest.js'></script>
<!--
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
$(function(){
$.ajax({
url: 'tmp1.csp',
success: function(Text){
obj=$('<div></div>').html(Text);
obj=obj.find('.ticket-box.ticket-box-c2');
alert(obj.html());
}
});
});
</script>
</head>
<body>
</body>
</html>
|
ksa, большое спасибо, но стандартными методами не могу потому что это со стороны сервера происходит на nodejs. Поэтому регуляркой надо получить содержимое. Все равно спасибо за помощь
|
Роман Андреевич,
мб сразу с сервером и работать? нужное вам вынести отдельным объектом |
большинство спрашивающих думают что сервер это неведомая ..., которая рандомно выплевывает неведомую ... :stop:
|
| Часовой пояс GMT +3, время: 18:07. |