2013-03-08 3 views
0

저는 업무용 사이드 프로젝트로 Javascript 북마크 릿을 작성하고 있습니다 (매우 초보자 용으로 작성하지 마십시오).내 정규식이 잘못 된 곳이 확실하지 않습니다.

테이프에서 재생 된 것을 제외하고는 cnn.com 성적을 검색하고 라이브 게스트의 이름과 제목을 선택합니다.

내가 다음 NAME, TITLE: 형식과 일치하는 모든 것을 스캔하여 정규 표현식을 사용하여 다음 BEGIN VIDEO CLIPEND VIDEO CLIP 사이에 텍스트를 제거 replace() 및 정규식을 사용하고, 사이트를 잡아이 작업을 수행합니다. 그것은 일부 성적표의 매력처럼 작동하고 다른 사람들에게 비참하게 실패합니다. 예를 들어

(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에 적용될 때, 그것은 여러 라이브 손님이있다하더라도, 호스트 (피어스 모건)의 이름을 경고 : 여기에 내 코드입니다. 그것은 내 정규식인가? 나는 Regexr에서 테스트를 해왔지만, 내가 말할 수있는 한, Javascript에서는 불법적 인 것을 사용하지 않는다.

다음의 성적표 중 하나를 사용해야합니다 : http://transcripts.cnn.com/transcripts.

+2

우선 + 난 아무것도 일치 그들이 모두 대문자로되어 있기 때문에'/ [AZ] +, [A-Z0-9] + :/g'와 같은 것이 맞을 것 같아요. – srosh

+0

그리고 [regex.exec] (https : //developer.mozilla .org/ko-ko/docs/JavaScript/Reference/Global_Objects/RegExp/exec) – srosh

답변

0

큰 문제는 아마도 욕심이 많습니다. [\s\S]*은 너무 많이 일치하고 제거합니다. 대신 [\s\S]*?을 사용해보세요. * 다음에 ?이 추가되면 가능한 한 일치하지 않게됩니다. 텍스트이 경우 귀하의 searchForGuests 정규식에서

+0

완벽하게 작동합니다. 감사합니다! – babyjordan

0

, ^([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

처음으로 전체 제목과 함께 이름이 처음 나타나는 것과 만 일치시키고 싶습니다. 또한 때로는 쉼표가 두 개 이상인 경우도 있습니다 ... Michael Jordan, NBA Player, Chicago Bulls. – babyjordan