0

Web ページの H1 タグ内のすべてのテキストを検索しようとしています。私はコードを使用しています:

myTextLoader.addEventListener(Event.COMPLETE, onLoaded);
function onLoaded(e:Event):void {
    webText = e.target.data;
    headingText = webText.match( /<H1>([^]*?)<\/H1>/ ); 
}

myTextLoader.load(new URLRequest("http://www.MyWebPage.com"));

それが完了すると、配列に 4 つのエントリが得られます。最初の 2 つは想定どおりですが、次の 2 つは見出しテキスト[2] = 401
見出しテキスト[3] = [Web ページのコンテンツ全体] です。

私は何を間違っていますか?

さらに、結果に H1 タグを取得しています。H1タグなしで、H1タグ内のすべてを私に与えるように式に伝える方法はありますか?

ありがとうございました、

4

1 に答える 1

1

match メソッドのドキュメントが示すように:

パターンが正規表現の場合、複数の一致する部分文字列を含む配列を返すには、正規表現で g (グローバル) フラグを設定する必要があります。

  • g (グローバル) フラグが設定されていない場合、返される配列には一致が 1 つしか含まれず、正規表現の lastIndex プロパティは変更されません。
  • g (グローバル) フラグが設定されている場合、メソッドは文字列の先頭 (インデックス位置 0) から検索を開始します。一致する部分文字列が空の文字列 (/x*/ などの正規表現で発生する可能性があります) の場合、メソッドはその空の文字列を一致の配列に追加し、次のインデックス位置で検索を続けます。メソッドの完了後、正規表現の lastIndex プロパティは 0 に設定されます。

pattern パラメーターが g (グローバル) フラグが設定された正規表現である場合、一致するものが見つからない場合、メソッドは空の配列を返します。パターン パラメータが文字列または非グローバル正規表現で、一致が見つからない場合、メソッドは null を返します。pattern パラメーターとして値を渡さない (または未定義の値) 場合、メソッドは null を返します。

問題は、グローバル フラグを指定しておらずg、正規表現パターンに追加するだけで修正できる結果が最大で 1 つしかないことでした。しかし、ロードされたページに H1 または h1 が使用されているかどうかわからない場合は、 i- 大文字と小文字を区別しないフラグを追加する必要があり、必要な最後のフラグは dotall が改行文字に一致することです。修正した正規表現は次のようになります。

webText.match( /\<H1>(.*?)\<\/H1>/gis );

@Jason Reeves は良い解決策を提案しましたが、すべての HTML ページが正しい XML ファイル (有効) であるvar webText:XML = new XML(event.target.data);とは限りません。つまり、「XML」のエラーでエラーがスローされ、制御できないソースに対してこの解決策を使用できなくなります。

于 2012-11-30T08:00:14.733 に答える