编辑:哦,对不起,我没说清楚。我有一个从AJAX得到的字符串,它是一个xhtml文档,我需要得到它的body标签,除非我能从这个字符串生成dom树?
我需要使用javascript regex从字符串中的body标记中获取所有内容,包括标记。
我知道这是一个副本,但我在其他问题中找到的正则表达式是针对不同风格的正则表达式的,并给了我错误。
提前感谢。
发布于 2009-07-30 17:13:56
document.getElementsByTagName('body')[0].innerHTML将返回body标记中所有内容的字符串。它不是正则表达式,但我不知道你为什么需要一个...?
帖子问题编辑:
您用来执行AJAX的XHR对象具有responseText和responseXML属性。只要响应是有效的xml,您就可以在我提到的xml对象上使用getElementsByTagName获得所需的任何标记。但如果你只想要身体的内部,我会这样做:
var inner = myXHR.responseText.split(/(<body>|</body>)/ig)[2]);发布于 2009-07-30 17:30:25
正则表达式不是解析DOM的理想工具,正如您将在本站点和其他站点中看到的那样。正如乔治四世所建议的,最理想的方法是使用更适合这一点的JavaScript工具,即getElementsByTagName并抓取innerHTML:
var bodyText = document.getElementsByTagName("body")[0].innerHTML;Edit1:我还没有看过它,但是Rudisimo推荐了一个很有前途的工具- XRegExp库,它是麻省理工学院的一个开源和可扩展的库。这可能是一个可行的选择-我仍然认为DOM是更好的方法,但这看起来比正则表达式的标准JavaScript实现要好得多。
Edit2:由于Gumbo提供的示例,出于准确性的原因,我撤销了之前关于Regex引擎的声明-无论表达式可能多么荒谬。然而,我坚持我的观点,在这种情况下使用正则表达式本质上是一种糟糕的方法,您应该使用前面提到的示例引用DOM。
发布于 2009-07-30 18:47:52
一般来说,正则表达式不适合解析。但是如果你真的想使用正则表达式,试试这个:
/^\s*(?:<(?:!(?:(?:--(?:[^-]+|-[^-])*--)+|\[CDATA\[(?:[^\]]+|](?:[^\]]|][^>]))*\]\]|[^<>]+)|(?!body[\s>])[a-z]+(?:\s*(?:[^<>"']+|"[^"]*"|'[^']*'))*|\/[a-z]+)\s*>|[^<]+)*\s*<body(?:\s*(?:[^<>"']+|"[^"]*"|'[^']*'))*\s*>([\s\S]+)<\/body\s*>/i正如您所看到的,没有简单的方法可以做到这一点。我甚至不认为这是一个正确的正则表达式。但是它应该考虑注释标签(<!-- … -->)、CDATA标签(<![CDATA[ … ]]>)和普通的HTML标签。
祝你在尝试阅读它时好运。
https://stackoverflow.com/questions/1207975
复制相似问题