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
标志,以使正则表达式不区分大小写,它将按预期工作.