2012-05-03 16 views
1

私はboxofficemojo.comで映画のリンクを訪問し、特定の映画の総収益を抽出するスクリプトを作成しようとしています。私はスプレッドシートにプラグインしたいので、私はこれらのスクリプトをGoogle Appsスクリプトとして書いています。Google Apps + HTML + Regexp

私の元の実装は、映画のページで非常に目立ってリストされている国内合計を探していたときにうまくいきました。 (例:http://boxofficemojo.com/movies/?id=clashofthetitans2.htmは、[日付]の時点で「国内合計」の下の「$ 80,882,168」を抽出します)。このスクリプトを拡張して、総生涯Grossesの下にリストされている世界的な総を得るが、私はそうすることができません。ここで

は、問題のコードである理由私はよく分からないします。

function gross(aUrl) 
{ 
    var page = UrlFetchApp.fetch(aUrl).getContentText(); 
    var matched = page.match(/Worldwide:<\/b><\/td>.*(\$.*)<td width="25%">/m); 
    var amt = "$0"; 
    if (matched == null) 
    { 
    matched = page.match(/<b>(\$.*)<\/b>.*Distributor:/m); 
    if (matched != null) 
    { 
     amt = matched[1]; 
    } 

    } else 
    { 
    amt = matched[1]; 
    } 
    return amt; 
} 

function testGross() 
{ 
    var result = gross("http://boxofficemojo.com/movies/?id=clashofthetitans2.htm"); 
    Logger.log(result); 
} 

それは何の価値があるはずです2番目の正規表現は正常に動作しますが、最初の正規表現は正常に動作しません。testGross()を実行すると、ログに以下のデータが出力されます。

null 
$80,882,168 

regexpはwww.rubular.comで、私がムービーページにいるときにページソースを表示しただけのデータからテストしました。私は、一致するために返されるページがもう切り捨てられていないことを確信しています。なぜなら、page.match行を、ページ変数の完全な内容で私に電子メールを送る行に置き換えると、私がページソースを閲覧することを選択した場合、私は何を得るでしょう。

ご協力いただければ幸いです。

答えて

0

example you usedのページソースを見ると、正規表現の「閉じる」部分を忘れていることがわかります。あなたの正規表現で

<td width="40%">=&nbsp;<b>Worldwide:</b></td> 
<td width="35%" align="right">&nbsp;<b>$289,732,168</b></td> 
<td width="25%">&nbsp;</td> 

は、(\$.*)部分の後、あなたは</b></td>とスペース文字を考慮していない:ここに関連する部分です。 また、m修飾子は期待どおりに機能しません。実際にはここで違いはありません。 .は改行と一致しません。

/Worldwide:<\/b><\/td>[\s\S]*(\$.*)<\/b>[\s\S]*<td width="25%">/m 

とにかく、ここで私はそれを行うだろう方法は次のとおりです:ここにあなたの「固定」正規表現である私のためにそれを固定

/Worldwide:<\/b><\/td>[\s\S]*?<b>(\$.+)<\/b><\/td>/ 
+0

クール!私は問題が\ s \ Sに含まれている空白と非空白の問題に過ぎないと思う。ありがとう! – tanookiben

+0

はい、それが大きな問題です。あなたがちょうどそれを変更する場合、終了タグはあなたにも "迷惑をかける"でしょう。ところで、なぜあなたはこの質問に答えたとマークしていないのですか? –

+0

申し訳ありませんが、それをどのように回答するかはわかりません:) – tanookiben

関連する問題