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

时间:2013-02-19 23:48:40

标签: javascript regex node.js express

我尝试在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.

2 个答案:

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

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