Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/76.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 如何使用regexp提取正文内容_Javascript_Html_Regex - Fatal编程技术网

Javascript 如何使用regexp提取正文内容

Javascript 如何使用regexp提取正文内容,javascript,html,regex,Javascript,Html,Regex,我在变量中有此代码。 <html> <head> . . anything . . </head> <body anything=""> content </body> </html> 我相信您可以将html文档加载到.net HTMLDocument对象中,然后只需调用HTMLDocume

我在变量中有此代码。

<html>

    <head>
        .
        .
        anything
        .
        .
    </head>

    <body anything="">
        content
    </body>

</html>

我相信您可以将html文档加载到.net HTMLDocument对象中,然后只需调用HTMLDocument.body.innerHTML

我相信,使用新的XDocumnet也有更简单的方法

只是附和上面的一些评论,regex并不是最好的工具,因为html不是一种常规语言,而且有些边缘情况很难解决


享受吧

请注意,上面提供的基于字符串的答案在大多数情况下都适用。regex解决方案提供的一个主要优点是,您可以更轻松地在打开/关闭主体标记上提供一个不区分大小写的匹配。如果您不关心这个问题,那么这里没有使用regex的主要原因

对于那些同时看到HTML和正则表达式的人来说,如果你不想用它来解析HTML,你可以用正则表达式来解析。如果由于某种原因,
内容
包含了
,那么它将失败,但除此之外,您还有一个非常具体的场景,即正则表达式能够实现您想要的功能:

const strVal = yourStringValue; //obviously, this line can be omitted - just assign your string to the name strVal or put your string var in the pattern.exec call below 
const pattern = /<body[^>]*>((.|[\n\r])*)<\/body>/im;
const array_matches = pattern.exec(strVal);
const strVal=yourStringValue//显然,这一行可以省略-只需将字符串指定给名称strVal或将字符串变量放入下面的pattern.exec调用中即可
常量模式=/]*>((.|[\n\r])*)/im;
常量数组_matches=pattern.exec(strVal);
执行上述操作后,
array\u matches[1]
将保存
var matched=XMLHttpRequest.responseText.match(/]*>([\w\w]*)/im)之间的任何内容;
警报(匹配[1]);

@marggg的意思是不应该用正则表达式解析HTML。出于某种原因,这个问题每小时都会被问一次。问题不是解析HTML,而是提取HTML的内容BODY@michael,不同的任务,啊哈-啊哈。所以我来到这里,因为我也已经达到了我想要使用正则表达式的程度。到目前为止,我使用DOMParser正确地完成了这项工作。原因是:Chrome非常担心我可能会丢失名称空间,以至于在我使用innerHTML提取正文时,它为所有内容添加了一个xmlns属性。我不想那样。我找不到任何其他方法来说服它:-(这解释了为什么正则表达式在解析Html@Doug时是一个错误的选择。尝试在高级别解析Html和尝试提取单个标记的特定内容之间有着巨大的区别。特别是问题和答案都指示的标记在所有源材料中只出现一次。如果在“p”上运行它,则会出现中断。)例如标记。它将返回第一个和最后一个之间包含的所有内容found@kilianc是的,正如编写的那样,它专门用于
标记(尽管它也可以用于在正确编写的HTML文档中只出现一次的任何标记,例如
)。若要将其用于重复标记,您需要进行一些修改。但这不是问题所在。@Jeffrey Blake您能分享一下要修改的内容吗?
content
const strVal = yourStringValue; //obviously, this line can be omitted - just assign your string to the name strVal or put your string var in the pattern.exec call below 
const pattern = /<body[^>]*>((.|[\n\r])*)<\/body>/im;
const array_matches = pattern.exec(strVal);
var matched = XMLHttpRequest.responseText.match(/<body[^>]*>([\w|\W]*)<\/body>/im);
alert(matched[1]);