javascript字符串拆分中的正则表达式,浏览器兼容性问题

Wal*_*nes 5 javascript regex cross-browser

我一直在研究这个问题,这个问题似乎越来越严重,我越深入.

我开始无辜地试图使用这个表达式在HTML'br'标签上分割一个字符串:

T = captions.innerHTML.split(/<br.*?>/g);
Run Code Online (Sandbox Code Playgroud)

这适用于每个浏览器(FF,Safari,Chrome),IE7和IE8除外,其示例输入文本如下:

is invariably subjective. <br /> 
The less frequently used warnings (Probably/Possibly) <br /> 
Run Code Online (Sandbox Code Playgroud)

请注意,示例文本在"/"之前包含一个空格,并在新行之前.

以下两个都将匹配每个浏览器中的所有HTML标记:

T = captions.innerHTML.split(/<.*?>/g);
T = captions.innerHTML.split(/<.+?>/g);
Run Code Online (Sandbox Code Playgroud)

然而,令人惊讶的(至少对我来说),这并不在FF和Chrome的工作:

T = captions.innerHTML.split(/<br.+?>/g);
Run Code Online (Sandbox Code Playgroud)

编辑:

这(在下面的答复中多次提出)在IE 7或8上不起作用:

T = captions.innerHTML.split(/<br[^>]*>/g);
Run Code Online (Sandbox Code Playgroud)

(它确实适用于Chrome和FF.)

我的问题是:有没有人知道一个表达式,它适用于所有当前浏览器,以匹配上面的'br'标签(但不是其他HTML标签).并且任何人都可以确认上面的最后一个示例应该是有效匹配,因为在'>'之前的示例文本中存在两个字符.

PS - 我的doctype是HTML过渡.

编辑:

我想我有证据证明这是IE上的string.split()行为,而不是一般的正则表达式.您必须使用split()才能看到此问题.我还发现了一个测试矩阵,当我在IE上运行它时,split()测试用例的失败率约为30%.在FF和Chrome上,相同的测试通过100%:

http://stevenlevithan.com/demo/split.cfm

到目前为止,我还没有找到IE的解决方案,该测试矩阵的作者提供的库没有解决这个问题.

Pao*_*ino 15

你的代码不工作的原因是因为IE解析HTML并在你通过innerHTML读取它时使标记为大写.例如,如果您有这样的HTML:

<div id='box'>
Hello<br>
World
</div>
Run Code Online (Sandbox Code Playgroud)

然后你使用这个Javascript(在IE中):

alert(document.getElementById('box').innerHTML);
Run Code Online (Sandbox Code Playgroud)

您将收到一个警告框:

Hello<BR>World
Run Code Online (Sandbox Code Playgroud)

注意<BR>现在是大写的.要解决此问题,只需添加i标志以及g标志,以使正则表达式不区分大小写,它将按预期工作.