使用RegEx提取段落标记之间的文本

我尝试使用JavaScript中的RegExp提取parapgraph标记之间的文本。 但它不工作…

我的模式:

<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. 

在JavaScript中没有“捕获所有组匹配”(类似于PHP的preg_match_all ),但是您可以使用.replace作弊:

 var matches = []; html.replace(/<p>(.*?)<\/p>/g, function () { //arguments[0] is the entire match matches.push(arguments[1]); }); 

要获得一个模式的多个匹配,将添加全局标志g
match方法在全局匹配时忽略捕获组() ,但是exec方法不会。 请参阅MDN 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] ,意思是匹配任何空格或非空格字符 ,而不是.

请注意,这种正则expression式将在嵌套段落上失败,因为它将匹配到第一个结束标记。