如何使用jQuery解析此HTML?

时间:2012-07-05 21:45:32

标签: javascript jquery regex

在过去的2个小时里试图解决这个问题。我把这个html作为一个来自AJAX请求的字符串返回:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>Preview</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="author" content="Connected Ventures LLC. Copyright 1999-2010." />
    <script type="text/javascript" src="js/jquery.js"></script>
    <script type="text/javascript" src="js/jquery.ui.js"></script>
    <script type="text/javascript" src="js/article.js"></script>
    <link href="/css/global.css" rel="stylesheet" type="text/css" />
    <link href="/css/article.css" rel="stylesheet" type="text/css" />
    <style type="text/css">
    html, body { background: #fff; color: #000; }
    </style>
</head>
<body class="the_article">
        <p>s</p></body>
</html>

我需要在body标签之间获取内容。我已经尝试过这个在另一个关于通过jQuery解析html的SO问题中提出的建议:

$(ajax_response).find('body.the_article').html();

没用。即使添加了以下内容:

dataType: 'html'

作为ajax请求参数。然后我尝试使用正则表达式解析它:

ajax_response.match(/<body class="the_article">.*?<\/body>/); 

它只是警告null。知道如何获得身体内容吗?

2 个答案:

答案 0 :(得分:0)

您的REGEX失败,因为字符串是多行的,.通配符匹配除空格字符以外的所有字符,因此换行符后面的开头body标记和正文内容,打破了模式。

使用[\s\S]代替.(字面意思是允许使用非空格和空格字符)

/<body class="the_article">[\s\S]*?<\/body>/

[编辑] - 在回复评论时,要捕获不包含其标签的正文内容,请将内容捕获为子组:

var body = response.match(/<body class="the_article">([\s\S]*?)(?=<\/body>)/);
console.log(body[1]); //body content, not including tag

另请注意,我们将结束体标记指定为预测,因为我们根本不需要匹配它,只是锚定它。 (JS不支持后视,缺少模拟like the one I wrote,因此我们别无选择,只能捕获开放正文标记。)

答案 1 :(得分:0)

你可以让dom为你工作。 使用document.write在iframe中注入代码,然后访问frame.document.body.innerHTML属性。