2013-03-08 2 views
0

Я пишу Javascript букмарклет в качестве побочного проекта для работы (не кодекс для жизни, очень новичок).Не знаете, где мое Regex пошло не так

Он просматривает транскрипт cnn.com и выбирает имена и названия живых гостей, за исключением тех, которые воспроизводятся с ленты.

Для этого я захватить сайт, а затем использовать replace() и регулярное выражение для удаления текста между BEGIN VIDEO CLIP и END 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.

+2

первый выкл + соответствует ничего, я угадать, что вы хотите совместить '/ [AZ] +, [A-Z0-9] +:/g' что-то вроде этого, так как все они в шапках – srosh

+0

и используют [regex.exec] (https: //developer.mozilla .org/EN-US/Docs/JavaScript/Ссылка/Global_Objects/RegExp/exec) – srosh

ответ

0

Главной проблемой здесь является, вероятно, жадный [\s\S]*, который будет соответствовать и удалять слишком много. Вместо этого попробуйте использовать [\s\S]*?. Добавленный ? после * делает его как можно меньше (вместо максимально возможного).

+0

Отлично работает, спасибо! – babyjordan

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 
+0

Мне нужно только совпадение с первым появлением имени, с полным названием. Кроме того, иногда названия имеют более одной запятой ... Майкл Джордан, игрок NBA, Chicago Bulls. – babyjordan

Смежные вопросы