使用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式将在嵌套段落上失败,因为它将匹配到第一个结束标记。