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]);