匹配多行模式

时间:2009-09-07 00:35:30

标签: javascript regex greasemonkey

我想使用greasemonkey从Last.fm中抓取wiki数据(这不适用于他们的REST api)。我可以使用GM_xmlhttpRequest()获取页面,并且它正常返回。

我不想使用DOM处理器来处理整个页面,因为我只想要一个小块,所以我使用正则表达式。

维基数据位于以下页面中:

<div id="wiki">
description

description
...
</div>

所以我写道:

/\<div id="wiki"\>(.+)\<\/div\>/m.exec(data)[1];

当我在错误控制台中测试它时(多行被平铺成一行,它可以工作,但在页面上失败并说

Error: /\<div id="wiki"\>(.+)\<\/div\>/m.exec(data) is null
Source File: file:///home/jeff/.mozilla/firefox/x4su9596.default/extensions/%7Be4a8a97b-f2ed-450b-b12d-ee082ba24781%7D/components/greasemonkey.js
Line: 357

我猜多线模式不会让多线匹配新线,这就是我的预期。如何使其匹配任何字符,包括换行符?

3 个答案:

答案 0 :(得分:10)

点与javascript中的换行符不匹配 - 这是js正则表达式的一个怪癖。

[^]应该起作用(例如“除了绝对没有的一切”)

答案 1 :(得分:5)

尝试[\s\S],因为[^]在IE8中不起作用

答案 2 :(得分:1)

尝试(。*?)而不是(。+)