Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.08.2019, 15:24
Профессор
Отправить личное сообщение для Роман Андреевич Посмотреть профиль Найти все сообщения от Роман Андреевич
 
Регистрация: 12.08.2016
Сообщений: 299

Обрезать 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>`;


Заранее благодарствую.
Ответить с цитированием
  #2 (permalink)  
Старый 14.08.2019, 15:56
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от Роман Андреевич
надо из него вырезать все, вокруг тега main, т.е. остается только:
let str = `<main><!-- some content --></main>`;
Оно?
var str='Лишний текст ... <main><!-- some content --\></main> ... продолжение лишнее';
alert(str.match(/<main>.*<\/main>/));
Ответить с цитированием
  #3 (permalink)  
Старый 14.08.2019, 16:08
Профессор
Отправить личное сообщение для Роман Андреевич Посмотреть профиль Найти все сообщения от Роман Андреевич
 
Регистрация: 12.08.2016
Сообщений: 299

ksa, да спасибо
Ответить с цитированием
  #4 (permalink)  
Старый 14.08.2019, 16:40
Профессор
Отправить личное сообщение для Роман Андреевич Посмотреть профиль Найти все сообщения от Роман Андреевич
 
Регистрация: 12.08.2016
Сообщений: 299

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&aacute;s cercana</h1>

<p>D&iacute;ctale estos n&uacute;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&aacute;lido para pagar en los locales de la Red Rapipago en todo el pa&iacute;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!!! Заранее благодарю
Ответить с цитированием
  #5 (permalink)  
Старый 15.08.2019, 07:45
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Роман Андреевич, можно использовать тот факт, что нужный тебе кусок начинается с
<div class="ticket-box ticket-box-c2">

и заканчивается
<br/>
</div>
 
<footer role="contentinfo" class="nav-footer">

Условно назову их левой и правой скобками...
Т.о. твое решение может выглядеть так
var str='Лишний текст ... левая скобка<!-- some content --\>правая скобка ... продолжение лишнее';
alert(str.match(/левая скобка(.*)правая скобка/)[1]);
Ответить с цитированием
  #6 (permalink)  
Старый 15.08.2019, 08:15
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Роман Андреевич, посмотрел я еще раз твою "строку"...
Оказывается тебе нужно содержимое
<div class="ticket-box ticket-box-c2">
...
</div>

Т.о. тебе и регулярка не нужна.
Получай данные как html и работай с ними стандартными методами
obj=html.querySelector('.ticket-box.ticket-box-c2');
Ответить с цитированием
  #7 (permalink)  
Старый 15.08.2019, 08:57
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Роман Андреевич, поместил твой текст в файл 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>
Ответить с цитированием
  #8 (permalink)  
Старый 20.08.2019, 06:52
Профессор
Отправить личное сообщение для Роман Андреевич Посмотреть профиль Найти все сообщения от Роман Андреевич
 
Регистрация: 12.08.2016
Сообщений: 299

ksa, большое спасибо, но стандартными методами не могу потому что это со стороны сервера происходит на nodejs. Поэтому регуляркой надо получить содержимое. Все равно спасибо за помощь
Ответить с цитированием
  #9 (permalink)  
Старый 20.08.2019, 16:51
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Роман Андреевич,
мб сразу с сервером и работать? нужное вам вынести отдельным объектом
Ответить с цитированием
  #10 (permalink)  
Старый 20.08.2019, 16:58
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

большинство спрашивающих думают что сервер это неведомая ..., которая рандомно выплевывает неведомую ...

Последний раз редактировалось ksa, 21.08.2019 в 10:35. Причина: мат
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод ссылок в html коде Biglu Элементы интерфейса 4 20.11.2018 11:42
вывод сообщений со стены vk Радиойод Общие вопросы Javascript 0 15.11.2017 15:48
Диалог между HTML и внешним JS в контексте расширения GoogleChrome ev1lart Events/DOM/Window 0 26.04.2017 19:25
Как корректно обрезать html в contenteditable div ? asker Events/DOM/Window 0 28.04.2016 17:04
Преобразовать строку в HTML код (обратное htmlspecialchars из php) daslex Общие вопросы Javascript 71 23.08.2015 20:41