我得到一些HTML作为ajax响应,我需要得到正文内容.所以我做了这个正则表达式:
/(<body>|<\/body>)/ig
Run Code Online (Sandbox Code Playgroud)
在所有浏览器中运行良好,但出于某种原因,当我使用split时,IE给了我另一个数组:
data.split(/(<body>|<\/body>)/ig)
Run Code Online (Sandbox Code Playgroud)
在所有普通浏览器中,正文的内容split(/(<body>|<\/body>)/ig)[2]只是在其中split(/(<body>|<\/body>)/ig)[1].(在IE7和8中测试)
为什么是这样?我怎么能修改它,以便在所有浏览器中获得相同的数组?
编辑只是为了澄清.我alrady有tobyodavies提到的解决方案.我想理解,为什么它表现不同.
这是响应中的HTML :(数据中的字符串)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de" dir="ltr">
<head>
blablabla...
</head>
<body>
<div class="iframe">
<div id="block-menu-menu-primary-links-user" class="block-menu">
<h3>Primary Links - User</h3> <div class="content"><ul class="menu"><li class="leaf first"><a target="content" href="#someurl" title="">Login</a></li>
<li class="leaf last"><a target="content" href="#someurl" title="">Register</a></li>
</ul></div>
</div>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
PS:我知道用正则表达式解析HTML很糟糕,但它不是我的代码,我只需要修复它.
它表现不同的原因是因为使用括号的子表达式捕获.其他浏览器将这些捕获内的匹配添加到生成的数组中,IE 8和更低版本没有.要获得更一致的结果,您必须使组不捕获:
/(?:<body>|<\/body>)/ig
Run Code Online (Sandbox Code Playgroud)
这就是其他浏览器拥有内容[2]而不是[1]- [1]理论上包含字符串的原因"<body>".其他浏览器在这个浏览器上是正确的,Internet Explorer 9通过实现ECMAScript第5版规范所概述的方法来解决问题.
但是,有更多的不一致.所有浏览器中的ECMAScript 5合规性都将解决这些差异,但您可能需要了解Steven Levithan的博客,其中概述了不同的实现,甚至提供了自定义split()方法作为问题的解决方案.
| 归档时间: |
|
| 查看次数: |
900 次 |
| 最近记录: |