我正在针对DOM运行正则表达式以从页面返回帐户状态。
这是页面上的字符串:
<h3>Status</h3><p>Completed</p>
这就是我目前正在使用的表达式
<h3>Status</h3>[\s\S]*?<p>([\s\S]*?)</p>
我的目标是只从此字符串中获取“已完成”状态,但不确定如何执行此操作。我已经阅读了一些关于子匹配的内容;只是不确定如何实现它。
答案 0 :(得分: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,你也可以做到。 (但你必须谷歌搜索解析器)
但最好是使用服务器端脚本。
答案 1 :(得分: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];