0

私は仕事のサイドプロジェクトとしてJavascriptブックマークレットを書いています(生活のためにコーディングしないでください、非常に初心者です)。

cnn.comトランスクリプトをスキャンして、テープから再生されるものを除いて、ライブゲストの名前とタイトルを選択します。

これを行うには、サイトを取得し、とregexを使用してとreplace()の間のテキストを削除し、別の正規表現を使用して形式に一致するすべてのものをスキャンします。一部のトランスクリプトでは魅力のように機能し、他のトランスクリプトでは惨めに失敗します。これが私のコードです:BEGIN VIDEO CLIPEND VIDEO CLIPNAME, 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)の名前のみがアラートになります。問題は私の正規表現ですか?私は正規表現でテストしてきましたが、私が知る限り、Javascriptで違法なものを使用していません。

次のトランスクリプトのいずれかで機能するはずです:http://transcripts.cnn.com/transcripts

4

2 に答える 2

0

ここでの主な問題はおそらく貪欲[\s\S]*であり、これは一致して削除しすぎます。[\s\S]*?代わりに使用してみてください。?後に追加された*ものは、(可能な限りではなく)可能な限り一致しなくなります。

于 2013-03-08T20:45:09.013 に答える
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
于 2013-03-08T20:48:37.197 に答える