-2

我正在针对 DOM 运行正则表达式以从页面返回帐户状态。

这是页面上的字符串:

<h3>Status</h3><p>Completed</p>

这是我目前使用的表达式 <h3>Status</h3>[\s\S]*?<p>([\s\S]*?)</p>

我的目标是仅从此字符串中获取“已完成”状态,但不确定如何执行此操作。我读过一些关于子匹配的文章;只是不知道如何实现它。

4

2 回答 2

0

这将起作用:/<h3>Status<\/h3>[\s\S]*<[^>]*>([^<]+)<.*/

看到它在这里工作:http: //jsfiddle.net/M7kJ7/

但说真的……为此使用 DOM 函数!为什么是正则表达式?

编辑:如何使用 DOM 函数解决它的示例:http: //jsfiddle.net/DycGh/

EDIT2:好的,在阅读了所有评论后,我得出的结论是,您确实有正当理由不直接访问数据库(您不能!他们不给您访问权限)而且您不能使用本机DOM 函数(您不是直接在每个页面上执行 js,而是一个中心页面将用于搜索其他页面),但是,我仍然认为浏览器端javascript 不是正确的路径。

使用服务器端javascript (node.js) 或其他语言,如 perl 会更好。通过解析器使用 DOM 也是正确的。

如果您选择node.js路径,则可以使用node-htmlparser。从您的节点应用程序中,您将打开每个 url,使用解析器的函数获取数据,然后构造一个 json 输出。您的页面将向节点发出 ajax 请求,并获取其 json 结果,您将使用它来创建输出。

如果你选择 perl,你可以使用HTML::DOM。其余程序将类似。

它不必是 perl 或 node.js,只是我知道的选项。使用 php、python 或 ruby​​ 你也可以做到。(但你必须谷歌解析器)

但最好使用服务器端脚本。

于 2013-08-01T17:26:36.190 回答
0

re.match()返回一个数组,其中包含每个捕获组的子匹配项。所以使用:

var re = new RegExp('<h3>Status</h3>[\s\S]*?<p>([\s\S]*?)</p>');
var match = re.match(str);
var submatch = match[1];
于 2013-08-01T17:31:25.437 回答