У меня есть переменная JavaScript, которая содержит HTML-страницу, и из-за настройки мне нужно извлечь все из <div id="LiveArea">
и </div>
из этой переменной с помощью JavaScript.JavaScript RegEx для тегов div
Любая помощь очень ценится.
У меня есть переменная JavaScript, которая содержит HTML-страницу, и из-за настройки мне нужно извлечь все из <div id="LiveArea">
и </div>
из этой переменной с помощью JavaScript.JavaScript RegEx для тегов div
Любая помощь очень ценится.
Я не уверен, что следую за вами, когда вы говорите: «Переменная Javascript, которая содержит html-страницу», но если вам нужно извлечь HTML-код между таким div, вы можете использовать свойство innerHTML элемента.
var e = document.getElementById('LiveArea');
if(e) alert(e.innerHTML);
Это следует сделать это:
pattern = /<div id="LiveArea">(.*?)<\/div>/;
matches = your_html_var.match(pattern);
the_string = matches[0];
document.write(the_string);
Должны быть совпадения [1], чтобы получить часть внутри div. И действительно, нужно надеяться, что нет внутреннего div ... Возможно, работа над четко определенным контекстом. – PhiLho 2008-11-13 21:54:47
Это не сработает, потому что конец матча может совпадать с закрывающим тегом, который не соответствует (обязательно) соответствует твоему тегу. Если вы сделаете выражение ленивым, оно может остановиться на закрытии `div` внутри` LiveArea`; если он жадный, он остановится при последнем закрытии `div`, опять же, не обязательно тот, который соответствует вашему открытию` div`. Кроме того, PhilLho прав: `matches [0]` будет содержать весь шаблон, а `matches [1]` будет удерживать вашу группу захвата. – 2010-03-20 07:51:47
Это будет возможно только с регулярным выражением если HTML, внутри этого DIV не содержит никаких других див. Поскольку то, что будет происходить с таким шаблоном, как Jeremy's, заключается в том, что он будет соответствовать первому закрывающему тегу div, который не обязательно будет закрывающим тегом для элемента div # LiveArea.
Если у вас есть контроль над исходным HTML, вы можете вставить комментарий, который можно использовать для соответствия для правильного «закрывающего» местоположения.
Есть другие Javascript-только вариантов, но каждая из них очень запутаны или Hacky
</div>
.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;
}
}
Я нашел article серфинг в Интернете, которые принимают в 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>');
}
Вы позвонит этот скрипт, посылающий DIV идентификатор, который вы хотите получить;
btnGet.Attributes.Add("Onclick", "getPrint('YOURDIV');")
Он работал точно так, как я хотел. Надеюсь, это поможет
кажется, что javascript не поддерживает lookbehind, который очень разочаровывает, что сделало бы эту проблему намного проще решить.
(?<=<div id="LiveArea">).*(?=<\/div>)
здесь некоторые ссылки, которые могут помочь из Тхо.
хотя при обсуждении вопроса о вложенных тегов ...это будет за пределами возможностей regex для решения, поэтому решение jeremy - лучшее, что вы можете сделать с регулярным выражением. и более того, они должны быть в одной строке ... он даже не будет соответствовать, если содержимое div находится на отдельных строках, потому что для javascript нет флага 's'. Думаю, Питер ответил на этот вопрос.
Извините за поздний ответ, если кто-то другой наткнулся на эту проблему, вот мое предложение, предполагая, что у вас есть доступ к странице, которую вы читаете из исходного кода.
Добавить HTML-комментарий как этот
<div id="LiveArea">
<!--LiveArea-->
Content here
<!--EndLiveArea-->
</div>
сопоставьте его с
htmlVal.match(/<\!\-\-LiveArea"\-\->(.*?)<\!\-\-EndLiveArea"\-\->/);
Пусть JQuery сделать синтаксический для вас:
$(page_html).find("#LiveArea").html();
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);
Используйте следующие регулярное выражение:
<div id="[^"]*">(.*?)</div>
Спасибо, но это невозможно, так как я держу веб-страницу в переменной. – 2008-11-13 21:09:25