不确定我的正则表达式出错了

时间:2013-03-08 20:35:16

标签: javascript regex replace bookmarklet

我正在编写一个Javascript书签作为工作的副项目(不要为生活而编码,非常初学者)。

它会扫描cnn.com成绩单并挑选出来的客人的姓名和头衔,不包括那些从录音带播放的内容。

要执行此操作,我会抓取该网站,然后使用replace()和正则表达式删除BEGIN VIDEO CLIPEND VIDEO CLIP之间的文本,然后使用其他正则表达式扫描与NAME, TITLE:匹配的所有内容{1}}格式。它就像一些成绩单上的魅力一样,并且在其他成绩单上惨遭失败。这是我的代码:

(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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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