我正在编写一个Javascript书签作为工作的副项目(不要为生活而编码,非常初学者)。
它会扫描cnn.com
成绩单并挑选出来的客人的姓名和头衔,不包括那些从录音带播放的内容。
要执行此操作,我会抓取该网站,然后使用replace()
和正则表达式删除BEGIN VIDEO CLIP
和END 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。
答案 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