0

我正在编写一个 Javascript 书签作为工作的辅助项目(不要以编码为生,非常适合初学者)。

它扫描cnn.com成绩单并挑选出现场嘉宾的姓名和头衔,不包括从磁带播放的那些。

为此,我抓取该站点,然后使用replace()and 正则表达式删除 and 之间的文本BEGIN VIDEO CLIPEND VIDEO CLIP然后使用另一个正则表达式扫描与NAME, TITLE:格式匹配的所有内容。它在某些成绩单上就像一种魅力,而在其他成绩单上却惨遭失败。这是我的代码:

(function () {
    var webPage = document.body.innerText;
    var tape = webPage.replace(/(BEGIN VIDEO CLIP)([\s\S]*)(END VIDEO CLIP)|(BEGIN VIDEOTAPE)([\s\S]*)(END VIDEOTAPE)/g, "");
    var searchForGuests = /[A-Z ].+,[A-Z0-9 ].+:/g;
    var guests = tape.match(searchForGuests).join("; ");
    alert("Guests: " + guests)
})();

例如,当应用于http://transcripts.cnn.com/TRANSCRIPTS/1303/05/pmt.01.html时,即使有几个现场客人,它也只会提醒主持人的姓名(Piers Morgan)。是我的正则表达式有问题吗?我一直在 Regexr 中进行测试,但据我所知,没有在 Javascript 中使用任何非法内容。

它应该适用于以下任何成绩单:http ://transcripts.cnn.com/transcripts 。

4

2 回答 2

0

这里的主要问题可能是贪婪[\s\S]*,它会匹配和删除太多。尝试[\s\S]*?改用。?在之后添加*使其匹配尽可能少(而不是尽可能多)。

于 2013-03-08T20:45:09.013 回答
0

在您的searchForGuests正则表达式中,尝试^([A-Za-z0-9, ]+(?=:))

如果您的文字是这样的:

TOM COUGHLIN, NFL COACH: Preparation is the key to success. 
MORGAN: Plus he's worn out his Oscar welcome but she's Hollywood's golden girl, Kristin Chenoweth. 

它将返回匹配:

TOM COUGHLIN, NFL COACH
MORGAN
于 2013-03-08T20:48:37.197 回答