IE中不同的分裂正则表达式结果

meo*_*meo 5 javascript regex

我得到一些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很糟糕,但它不是我的代码,我只需要修复它.

And*_*y E 9

它表现不同的原因是因为使用括号的子表达式捕获.其他浏览器将这些捕获内的匹配添加到生成的数组中,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()方法作为问题的解决方案.