Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用正则表达式提取段落标记之间的文本_Javascript_Regex_Node.js_Express - Fatal编程技术网

Javascript 使用正则表达式提取段落标记之间的文本

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

我尝试在javascript中使用RegExp在paragraph标记之间提取文本。但它不起作用

我的模式:

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