-2

我正在尝试制作一个 Greasemonkey 用户脚本,它将在另一个网站上显示来自一个网站的信息。我尝试用正则表达式来做这件事,但被match()语法困住了。

页面内容是这样的:

<html><body>
<h1 class="pos-title">Fritz Paul</h1>
<div class="columns">
    <div class="pos-column1">
        <ul id="attributes">
             ... ...
        </ul>
    </div>
    <div class="pos-column2">
        <ul class="attributes">
             ... ...
        </ul>
    </div>
</div>
</body></html>

我只想得到:

<div class="columns">
    <div class="pos-column1">
        <ul id="attributes">
             ... ...
        </ul>
    </div>
    <div class="pos-column2">
        <ul class="attributes">
             ... ...
        </ul>
    </div>    
</div>


我试过这样的代码:

attibutes = responseDetails.responseText.match(xxxx);
playerNotesContent.innerHTML = attibutes;

我尝试了很多.match(...)我在这个网站上找到的例子,但我无法让它工作。

4

1 回答 1

1

正如其他人所说,永远不要尝试使用正则表达式解析 HTML。请改用 DOM 解析。

问题尚不清楚,但您似乎正在通过 AJAX 获取页面并尝试解析它,对吗?此外,您真的想要每个文本中的所有标记<div class="columns">还是只需要特定的文本位?

这是 Greasemonkey 的一般方法。它使用 jQuery 使 DOM 解析更容易。根据 OP 的评论和发布的脚本进行了
更新。:

// ==UserScript==
// @name        _Parse Ajax Response for specific nodes
// @namespace   http://www.test.com
// @include     http://www.test.com/player/*/details.php
// @require     http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// ==/UserScript==

var player_id = document.location.pathname.match(RegExp('player/([^/]+)/details.php$'))[1];
if (!player_id) { return; }

GM_xmlhttpRequest ( {
    method: 'GET',
    url:    'http://www.test2.com/players/item/' + player_id,
    onload: function (responseDetails) {
                var respDoc     = $(responseDetails.responseText);
                var targNodes   = $("div.columns", respDoc);

                $("#playerContent").after ('<div id="player_stats_block"></div>');

                $("#player_stats_block").append (targNodes);
            }
} );
于 2012-05-01T20:24:50.947 回答