正则表达式问题 - 尝试提取多个<article> s </article>

时间:2014-11-29 21:28:32

标签: regex

我有一个网页,我需要从中提取信息。

需要循环使用多个<article>标记(我需要从中提取内容)。每个文章标签都有许多属性,&#34; id&#34;,&#34; class&#34;等。

我不知道如何编写我需要的正则表达式。

到目前为止我所拥有的是:

<article ([a-zA-Z\s"\S][^>]*)>

这能够提取所有标签及其属性,但是,我不知道如何在标签内捕获信息。

我觉得我需要编写类似于以下内容的正则表达式:&#34;在<article ([a-zA-Z\s"\S][^>]*)>内获取所有内容,直到您到达下一个</article>标记。&#34;,但不知道该怎么做该...

感谢您的输入

3 个答案:

答案 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).
    });