我一直在调查这个问题,随着我深入研究,这个问题似乎只会变得更糟。
我开始天真地尝试使用这个表达式来分割 HTML 'br' 标签上的字符串:
T = captions.innerHTML.split(/<br.*?>/g);
这适用于每个浏览器(FF、Safari、Chrome),除了 IE7 和 IE8,输入文本示例如下:
is invariably subjective. <br />
The less frequently used warnings (Probably/Possibly) <br />
请注意,示例文本在“/”之前和新行之前包含一个空格。
以下两项都将匹配每个浏览器中的所有 HTML 标记:
T = captions.innerHTML.split(/<.*?>/g);
T = captions.innerHTML.split(/<.+?>/g);
然而,令人惊讶的是(至少对我来说)does not在 FF 和 Chrome 中工作:
T = captions.innerHTML.split(/<br.+?>/g);
Edit:
这(在下面的回复中多次建议)在 IE 7 或 8 上不起作用:
T = captions.innerHTML.split(/<br[^>]*>/g);
(它确实可以在 Chrome 和 FF 上运行。)
我的问题是:有谁知道适用于所有当前浏览器的表达式来匹配上面的“br”标签(但不适用于其他 HTML 标签)。任何人都可以确认上面的最后一个示例应该是有效的匹配,因为示例文本中“>”之前存在两个字符。
PS - 我的文档类型是 HTML 过渡性的。
Edit:
我想我有证据表明这是特定于 IE 上的 string.split() 行为,而不是一般的正则表达式。你必须使用 split() 才能看到这个问题。我还发现了一个测试矩阵,当我在 IE 上运行 split() 测试用例时,它的失败率约为 30%。同样的测试在 FF 和 Chrome 上通过了 100%:
http://stevenlevithan.com/demo/split.cfm http://stevenlevithan.com/demo/split.cfm
到目前为止,我仍然没有找到针对 IE 的解决方案,并且该测试矩阵的作者提供的库也没有修复这种情况。