Javascript 不知道我的正则表达式哪里出错了
我正在编写一个Javascript书签,作为工作的一个辅助项目(不要以编写代码为生,我是一个初学者) 它扫描了cnn.com的一份记录,找出了现场嘉宾的姓名和头衔,不包括从磁带上播放的名字和头衔 为此,我抓取站点,然后使用Javascript 不知道我的正则表达式哪里出错了,javascript,regex,replace,bookmarklet,Javascript,Regex,Replace,Bookmarklet,我正在编写一个Javascript书签,作为工作的一个辅助项目(不要以编写代码为生,我是一个初学者) 它扫描了cnn.com的一份记录,找出了现场嘉宾的姓名和头衔,不包括从磁带上播放的名字和头衔 为此,我抓取站点,然后使用replace()和regex删除BEGIN VIDEO CLIP和END VIDEO CLIP之间的文本,然后使用另一个正则表达式扫描与名称、标题:格式匹配的所有内容。它在一些成绩单上就像一个符咒,而在其他成绩单上却失败得很惨。这是我的密码: (function () {
replace()
和regex删除BEGIN VIDEO CLIP
和END VIDEO CLIP
之间的文本,然后使用另一个正则表达式扫描与名称、标题:
格式匹配的所有内容。它在一些成绩单上就像一个符咒,而在其他成绩单上却失败得很惨。这是我的密码:
(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)
})();
例如,当应用于时,它只会提醒主机名(Piers Morgan),即使有多个实时来宾。问题出在我的正则表达式上吗?我一直在用Regexr进行测试,但据我所知,在Javascript中没有使用任何非法的东西
它应该适用于以下任何一个成绩单:。这里的主要问题可能是贪婪的
[\s\s]*
,这将匹配并删除太多内容。尝试改用[\s\s]*?
。在*
之后添加的?
使其尽可能少地匹配(而不是尽可能多地匹配)。在搜索guests
正则表达式中,尝试^([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
首先,+匹配任何东西,我猜您希望匹配
/[A-Z]+,[A-Z0-9]+:/g
类似的东西,因为它们都在CAP中并使用,我只希望在名称第一次出现时匹配完整的标题。而且,有时标题有不止一个逗号。。。迈克尔·乔丹,NBA球员,芝加哥公牛队。