Я использую dom-анализатор node.js, который (не обязательно) извлекает теги из DOM с помощью регулярных выражений.
Вы можете найти dom-parser по адресу: https://github.com/ershov-konst/dom-parser
Иногда HTML некоторых веб-страниц (например, https://www.ecosia.org/) приводит к зависанию приложения node.js.Я протестировал использование простого ванильного сценария сопоставления и обнаружил, что tagRegExp приводит к зависанию сценария (возможно, из-за катастрофического обратного отслеживания?)
Я на самом деле использую его для нахождения ссылки rel = "canonical" и href= "xyz" (если есть, у Ecosia нет канонического).
tagRegExp:
/(<\/?[a-z][a-z0-9]*(?::[a-z][a-z0-9]*)?\s*(?:\s+[a-z0-9-_]+=(?:(?:'[\s\S]*?')|(?:"[\s\S]*?")))*\s*\/?>)|([^<]|<(?![a-z\/]))*/gi
Сценарий тестирования чистого JS:
<script type="text/javascript">
var text = '... html source ...';
var text_esc = text
text_esc = text_esc.replace(/\</g, "<");
text_esc = text_esc.replace(/\>/g, ">");
var regex = /(<\/?[a-z][a-z0-9]*(?::[a-z][a-z0-9]*)?\s*(?:\s+[a-z0-9-_]+=(?:(?:'[\s\S]*?')|(?:"[\s\S]*?")))*\s*\/?>)|([^<]|<(?![a-z\/]))*/gi;
var found = text.match(regex);
var found_len = found.length;
document.write("Text: " + text_esc + "<br /><br />" + "Regex pattern: " + regex + "<br /><br />");
document.write("Matches: " + found_len + "<br /><br />");
for (var i=0;i<found_len;i++)
{
found[i] = found[i].replace(/\</g, "<");
found[i] = found[i].replace(/\>/g, ">");
document.write("[" + i + "]: " + found[i] + "<br /><br />");
}
</script>
Любые идеи приветствуются.Заранее спасибо.