Javascript 使用正则表达式提取段落标记之间的文本
我尝试在javascript中使用RegExp在paragraph标记之间提取文本。但它不起作用 我的模式:Javascript 使用正则表达式提取段落标记之间的文本,javascript,regex,node.js,express,Javascript,Regex,Node.js,Express,我尝试在javascript中使用RegExp在paragraph标记之间提取文本。但它不起作用 我的模式: <p>(.*?)</p> 我想要的是: My content. Second sentence. JavaScript中没有“捕获所有组匹配”(类似于PHP的preg\u match\u all),但您可以使用进行欺骗。替换: var matches = []; html.replace(/<p>(.*?)<\/p>/g, functi
<p>(.*?)</p>
我想要的是:
My content. Second sentence.
JavaScript中没有“捕获所有组匹配”(类似于PHP的preg\u match\u all
),但您可以使用进行欺骗。替换:
var matches = [];
html.replace(/<p>(.*?)<\/p>/g, function () {
//arguments[0] is the entire match
matches.push(arguments[1]);
});
var匹配=[];
html.replace(/(.*)/g,函数(){
//参数[0]是整个匹配项
匹配.push(参数[1]);
});
JavaScript中没有“捕获所有组匹配”(类似于PHP的preg\u match\u all
),但您可以使用进行欺骗。替换:
var matches = [];
html.replace(/<p>(.*?)<\/p>/g, function () {
//arguments[0] is the entire match
matches.push(arguments[1]);
});
var匹配=[];
html.replace(/(.*)/g,函数(){
//参数[0]是整个匹配项
匹配.push(参数[1]);
});
要获得一个模式的多个匹配,将添加全局标志g
。
全局匹配时,match
方法忽略捕获组()
,但exec
方法不忽略。看
var m,
rex=/(*?)/g,
str='我的内容 第二句话 ",;
while((m=rex.exec(str))!=null){
console.log(m[1]);
}
//我的内容。
//第二句。
如果段落之间可能有换行符,请使用[\s\s]
,意思是匹配任何空格或非空格字符,而不是
请注意,这种正则表达式在嵌套段落上会失败,因为它将匹配到第一个结束标记。要获得一个模式的多个匹配,将添加全局标志g
。
全局匹配时,match
方法忽略捕获组()
,但exec
方法不忽略。看
var m,
rex=/(*?)/g,
str='我的内容 第二句话 ",;
while((m=rex.exec(str))!=null){
console.log(m[1]);
}
//我的内容。
//第二句。
如果段落之间可能有换行符,请使用[\s\s]
,意思是匹配任何空格或非空格字符,而不是
请注意,这种正则表达式在嵌套段落上会失败,因为它将匹配第一个结束标记。您可以使用正则表达式获得
标记的主体(尽管警告不要使用它进行解析),但是如果您使用的是JavaScript,则无需这样做,因为您有document.getElementsByTagName(“p”)
@iamnotmaynard-document.getElementsByTagName()
是一种DOM方法。它仅对JavaScript可用,因为浏览器提供了它。对于node.js,没有浏览器,node.js也不会将HTML本机解析为DOM。您不能仅仅因为使用JavaScript语言就假设浏览器DOM可用。如果安装了这样的包,比如@gilly3-Ah,我明白了,DOM可以被node.js使用。我不知道。@gilly3,hoh不知道。。。又不是那么简单的一般答案-u-。使用regex来满足他的需要是非常好的。使用regex可以很好地获得
标记的主体(尽管警告不要使用它进行解析),但是如果使用JavaScript,则无需这样做,因为您有document.getElementsByTagName(“p”)
@iamnotmaynard-document.getElementsByTagName()
是一种DOM方法。它仅对JavaScript可用,因为浏览器提供了它。对于node.js,没有浏览器,node.js也不会将HTML本机解析为DOM。您不能仅仅因为使用JavaScript语言就假设浏览器DOM可用。如果安装了这样的包,比如@gilly3-Ah,我明白了,DOM可以被node.js使用。我不知道。@gilly3,hoh不知道。。。又不是那么简单的一般答案-u-。用正则表达式来表示他想要的是很好的。好吧,那么,我怎么用Jade和NodeJS来提取和之间的文本呢?@tonymx227我真的不知道你的意思。。该代码只是原始JavaScript,因此您应该能够将其用于我所知道的任何JS解释器。但是使用控制器,我将所有帖子发送到我的Jade视图(例如),使用我的视图,我尝试获取没有标签的帖子内容${posts.content.match('/(.*?/g')}但它不起作用……我不知道如何使用Jade视图,因此我无法真正帮助您。我说用.replace
,而不是match
,虽然我问了一个新问题,因为它不是同一主题。不过还是要谢谢你。好吧,那我怎么用Jade和NodeJS来提取和之间的文本呢?@tonymx227我真的不知道你的意思。。该代码只是原始JavaScript,因此您应该能够将其用于我所知道的任何JS解释器。但是使用控制器,我将所有帖子发送到我的Jade视图(例如),使用我的视图,我尝试获取没有标签的帖子内容${posts.content.match('/(.*?/g')}但它不起作用……我不知道如何使用Jade视图,因此我无法真正帮助您。我说用.replace
,而不是match
,虽然我问了一个新问题,因为它不是同一主题。不过还是要谢谢你,没有“嵌套段落”这种东西。
不需要结束标记。在打开的
标记之后出现的块元素意味着关闭的
标记。您的regexp将不带结束标记的多个段落视为一个段落。@gilly3。XHTML需要结束标记,我认为OP在他的问题中非常清楚,他正在寻找开始和结束p标记之间的内容。很明显,我的答案是假设结束标记,如果没有任何结束标记,OP的正则表达式(不是我的)无论如何都不会匹配。不过,我认为你的观察是值得的,所以谢谢你。没有“嵌套段落”这样的东西。
不需要结束标记。在打开的
标记之后出现的块元素表示关闭
var matches = [];
html.replace(/<p>(.*?)<\/p>/g, function () {
//arguments[0] is the entire match
matches.push(arguments[1]);
});
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.