1

javascriptでRegExpを使用して、段落タグ間のテキストを抽出しようとしています。しかし、それは機能しません...

私のパターン:

<p>(.*?)</p>

主題:

<p> My content. </p> <img src="https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcTJ9ylGJ4SDyl49VGh9Q9an2vruuMip-VIIEG38DgGM3GvxEi_H"> <p> Second sentence. </p>

結果 :

My content

私が欲しいもの:

My content. Second sentence.
4

2 に答える 2

4

JavaScript には「すべてのグループ一致をキャプチャする」(PHP の に類似preg_match_all) はありませんが、次を使用してごまかすことができます.replace

var matches = [];
html.replace(/<p>(.*?)<\/p>/g, function () {
    //arguments[0] is the entire match
    matches.push(arguments[1]);
});
于 2013-02-19T23:52:32.140 に答える
1

パターンの複数の一致を取得するには、グローバル フラグgが追加されます。
このメソッドは、グローバルに一致するときにmatchキャプチャ グループを無視しますが、無視しません。MDN execを参照してください。()exec

var m,
    rex = /<p>(.*?)<\/p>/g,
    str = '<p> My content. </p> <img src="https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcTJ9ylGJ4SDyl49VGh9Q9an2vruuMip-VIIEG38DgGM3GvxEi_H"> <p> Second sentence. </p>';

while ( ( m = rex.exec( str ) ) != null ) {
    console.log( m[1] );
}

//  My content. 
//  Second sentence. 

段落間に改行がある可能性がある場合は、 の代わりに を使用します。これは、任意のスペースまたは非スペース文字に一致する[\s\S]ことを意味します。 .

この種の正規表現は、最初の終了タグまで一致するため、ネストされた段落では失敗することに注意してください。

于 2013-02-20T09:57:28.777 に答える