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方法在全局匹配时会忽略捕获组(),但该exec方法不会。请参阅MDN 执行

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], 表示匹配任何空格或非空格字符,而不是..

Note that this kind of regex will fail on nested paragraphs as it will match up to the first closing tag.

于 2013-02-20T09:57:28.777 回答