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

Not sure where my Regex went wrong

本文关键字:出错 错了 我的 正则表达式 不确定      更新时间:2023-09-26

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

它扫描cnn.com记录,并挑选出现场嘉宾的名字和头衔,不包括那些从磁带中播放的。

要做到这一点,我抓住站点,然后使用replace()和regex删除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.

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

在您的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. 

它会返回match:

TOM COUGHLIN, NFL COACH
MORGAN