我想使用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
我猜多线模式不会让多线匹配新线,这就是我的预期。如何使其匹配任何字符,包括换行符?
答案 0 :(得分:10)
点与javascript中的换行符不匹配 - 这是js正则表达式的一个怪癖。
[^]
应该起作用(例如“除了绝对没有的一切”)
答案 1 :(得分:5)
尝试[\s\S]
,因为[^]
在IE8中不起作用
答案 2 :(得分:1)
尝试(。*?)而不是(。+)