我尝试在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.
答案 0 :(得分:3)
JavaScript中没有“捕获所有组匹配”(类似于PHP的preg_match_all
),但您可以使用.replace
作弊:
var matches = [];
html.replace(/<p>(.*?)<\/p>/g, function () {
//arguments[0] is the entire match
matches.push(arguments[1]);
});
答案 1 :(得分: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]
,表示匹配任何空格或非空格字符,而不是.
。
请注意,这种正则表达式在嵌套段落上会失败,因为它会匹配第一个结束标记。