Обрезать 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, время: 20:28. |