我有一个网页,我需要从中提取信息。
需要循环使用多个<article>
标记(我需要从中提取内容)。每个文章标签都有许多属性,&#34; id&#34;,&#34; class&#34;等。
我不知道如何编写我需要的正则表达式。
到目前为止我所拥有的是:
<article ([a-zA-Z\s"\S][^>]*)>
这能够提取所有标签及其属性,但是,我不知道如何在标签内捕获信息。
我觉得我需要编写类似于以下内容的正则表达式:&#34;在<article ([a-zA-Z\s"\S][^>]*)>
内获取所有内容,直到您到达下一个</article>
标记。&#34;,但不知道该怎么做该...
感谢您的输入
答案 0 :(得分:1)
正则表达式?请reconsider。从您的一条评论中得知:&#34;我正在构建一个Chrome扩展程序,因此它是使用JavaScript完成的。&#34;然后我建议你使用浏览器的内置XML DOM解析器。
从字符串变量xmlText
加载XML:
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlText, "text/xml");
从单独的XML文件加载XML:
var xhttp = new XMLHttpRequest();
xhttp.open("GET", "articles.xml", false);
xhttp.send();
var xmlDoc = xhttp.responseXML;
这会产生一个方便的对象结构,您可以浏览它。
var articles = xmlDoc.getElementsByTagName('article');
for (var i = 0; i < articles.length; i++) {
var article = articles[i];
var id = article.getAttribute('id');
var class = article.getAttribute('class');
var content = article.nodeValue;
...
}
答案 1 :(得分:0)
根据您的编程语言,您可能会找到HTML解析库。如果你找不到那些,你可能会使用松散解析XML的库(不需要完整有效XML文档的解析器)。然后,您可以简单地获取文章元素列表并单独解析它们。如果是HTML解析器,您可能还可以读出属性!
如果上述说法不起作用,也许您可以将文本拆分为&lt; \ article&gt;,然后将该文本拆分为&lt;文章(没有空格)并读取数组中的第二个索引。然后,您可以将其拆分为&gt;并且您将在第一个索引上保留元素属性,在第二个索引上保留内容。如果有人找到一个正则表达式的解决方案来更好地解决这个问题,请告诉我!
希望它有所帮助。
皮姆
答案 2 :(得分:0)
通常情况下,我讨厌人们给出这个答案,但是: JQuery可以为你做到这一点!。由于您已经在使用jQuery框架,因此利用secondary functionality of the jQuery function将HTML字符串解析为一系列DOM节点。然后,您可以使用find function查询顶级节点的子节点!你的最终代码最终会看起来像这样:
$(htmlString)
.find('article')
.each(function(index, article) {
//Extract information from $(article).
});