JavaScript RegEx для тегов div

5 [2008-11-14 00:01:00]

У меня есть переменная JavaScript, которая содержит HTML-страницу, и из-за настройки мне нужно извлечь все из <div id="LiveArea"> и </div> из этой переменной с помощью JavaScript.

Любая помощь очень ценится.

javascript regex


10 ответов


7 SoSo [2011-03-19 11:01:00]

var html = "<stuff><div id=\"LiveArea\">hello stackoverflow!</div></stuff>";

var matches = html.match(/<div\s+id="LiveArea">[\S\s]*?<\/div>/gi);
var matches = matches[0].replace(/(<\/?[^>]+>)/gi, ''); // Strip HTML tags?

alert(matches);

3 Jeremy Ruten [2008-11-14 00:11:00]

Это должно сделать это:

pattern = /<div id="LiveArea">(.*?)<\/div>/;
matches = your_html_var.match(pattern);
the_string = matches[0];

document.write(the_string);

2 FlySwat [2008-11-14 00:23:00]

var temp = document.createElement('DIV');
temp.innerHTML = YourVariable;
var liveArea;
for (var i = 0; i < temp.childNodes.length; i++)
{
   if (temp.childNodes[i].id == 'LiveArea')
   {
       liveArea = temp.childNodes[i];
       break;
   }
}

2 Peter Bailey [2008-11-14 00:17:00]

Это будет невозможно с помощью обычного выражения, если только HTML внутри этого div не содержит других div. Поскольку то, что будет происходить с таким шаблоном, как Jeremy, заключается в том, что он будет соответствовать первому закрывающему тегу div, который не обязательно будет закрывающим тегом для элемента div # LiveArea.

Если у вас есть контроль над исходным HTML, вы можете вставить комментарий, который вы можете использовать для соответствия для правильного "закрывающего" местоположения.

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

  • Установите innerHTML скрытого элемента, равного этой строке содержимого, THEN вытащите innerHTML, вам нужно использовать решение mmattax. Но вам, вероятно, придется выполнить второй шаг здесь с тайм-аутом, чтобы дать браузеру время оценить этот новый HTML-код и выставить его в DOM.
  • Соберите содержимое, отслеживая открытия/закрытия divs, когда вы сталкиваетесь с ними, чтобы затем узнать, когда вы находитесь в правильном теге </div>.

1 mmattax [2008-11-14 00:04:00]

Я не уверен, что следую за вами, когда вы говорите: "Переменная Javascript, которая содержит html-страницу", но если вам нужно извлечь HTML-код из такого div, вы можете использовать свойство element innerHTML.


var e = document.getElementById('LiveArea');
if(e) alert(e.innerHTML);



0 Victor [2009-07-09 23:56:00]

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

(?<=<div id="LiveArea">).*(?=<\/div>)

Вот некоторые ссылки, которые могут помочь вам.

хотя при обсуждении проблемы с вложенными тегами... это будет за пределами возможностей регулярного выражения, чтобы решить такое jeremy решение, это лучшее, что вы можете сделать с регулярным выражением. и более того, они должны быть в одной строке... он даже не будет соответствовать, если содержимое div находится на отдельных строках, потому что для javascript нет флага 's'. Я думаю, что Питер дал ответ на этот вопрос.


0 Supriya Gopalakrishnan [2014-12-02 15:31:00]

Используйте следующее регулярное выражение:

<div id="[^"]*">(.*?)</div>

0 Nelson Miranda [2008-11-14 01:15:00]

Я нашел эту статью статью в Интернете, которая принимает идентификатор DIV и показывает его на новой странице для печати;

function getPrint(print_area)
{
//Creating new page
var pp = window.open();
//Adding HTML opening tag with <HEAD> … </HEAD> portion 
pp.document.writeln('<HTML><HEAD><title>Print Preview</title>')
pp.document.writeln('<LINK href=Styles.css type="text/css" rel="stylesheet">')
pp.document.writeln('<LINK href=PrintStyle.css ' + 
                    'type="text/css" rel="stylesheet" media="print">')
pp.document.writeln('<base target="_self"></HEAD>')

//Adding Body Tag
pp.document.writeln('<body MS_POSITIONING="GridLayout" bottomMargin="0"');
pp.document.writeln(' leftMargin="0" topMargin="0" rightMargin="0">');
//Adding form Tag
pp.document.writeln('<form method="post">');

//Creating two buttons Print and Close within a HTML table
pp.document.writeln('<TABLE width=100%><TR><TD></TD></TR><TR><TD align=right>');
pp.document.writeln('<INPUT ID="PRINT" type="button" value="Print" ');
pp.document.writeln('onclick="javascript:location.reload(true);window.print();">');
pp.document.writeln('<INPUT ID="CLOSE" type="button" ' + 
                    'value="Close" onclick="window.close();">');
pp.document.writeln('</TD></TR><TR><TD></TD></TR></TABLE>');

//Writing print area of the calling page
pp.document.writeln(document.getElementById(print_area).innerHTML);
//Ending Tag of </form>, </body> and </HTML>
pp.document.writeln('</form></body></HTML>'); 

}

Вы назовёте это script отправкой идентификатора DIV, который вы хотите получить;

btnGet.Attributes.Add("Onclick", "getPrint('YOURDIV');")

Он работал точно так, как я хотел. Надеюсь, что это поможет.


0 Magnar [2010-03-20 10:33:00]

Пусть jQuery выполняет синтаксический анализ для вас:

$(page_html).find("#LiveArea").html();

-2 Jonas [2010-03-20 10:28:00]

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

Добавьте HTML-комментарий, подобный этому

<div id="LiveArea">
<!--LiveArea-->
Content here
<!--EndLiveArea-->
</div>

Затем сопоставьте его с

htmlVal.match(/<\!\-\-LiveArea"\-\->(.*?)<\!\-\-EndLiveArea"\-\->/);