Roy*_*mir 5 javascript regex cross-browser
看看这个样本:
>'1,2,3,4,5'.split(/,/)
Run Code Online (Sandbox Code Playgroud)
结果: ["1", "2", "3", "4", "5"]
但看看这个样本:
>'1,2,3,4,5'.split(/(,)/)
Run Code Online (Sandbox Code Playgroud)
结果: ["1", ",", "2", ",", "3", ",", "4", ",", "5"]
来自MDN:
如果separator是包含捕获括号的正则表达式,则每次匹配时,捕获括号的结果(包括任何未定义的结果)都会拼接到输出数组中.但是,并非所有浏览器都支持此功能.
题 :
我在哪里可以找到支持该功能的浏览器(和版本)列表.
mdn不公开该信息.
在Steven Levithan和XRegExp网站的博客中,确认了在Internet Explorer 8之前没有实现正确的行为(包含结果数组中捕获组捕获的文本).
我已经在browserstack上独立地确认了这个结果,并且进一步确认了String.split仅从版本10开始为Internet Explorer正确实现了带有捕获组的正则表达式时的行为.
以下是相关屏幕截图的链接:
测试网站的完整源代码:
<html>
<head>
</head>
<body>
<script type="text/javascript">
document.write("<h1>Testing String.split, given regex with capturing group</h1>");
function runTest(num, actual, expected) {
var equals = true;
if (actual.length === expected.length) {
for (var i = 0; i < actual.length; i++) {
if (actual[i] !== expected[i]) {
equals = false;
break;
}
}
} else {
equals = false;
}
document.write("<h2>Test " + num + ":</h2>");
document.getElementsByTagName('body')[0].appendChild(document.createTextNode("'" + actual.join("' '") + "'"));
document.write(equals ? "<h2>Compliant to ECMA 5.1</h2>" : "<h2>NOT compliant to ECMA 5.1</h2>");
}
</script>
<script type="text/javascript">
runTest(1, '1,2,3,4,5'.split(/(,)/), ["1", ",", "2", ",", "3", ",", "4", ",", "5"]);
</script>
<script type="text/javascript">
runTest(2, 'ABCDEF'.split(/()/), ["A", "", "B", "", "C", "", "D", "", "E", "", "F"]);
</script>
<script type="text/javascript">
runTest(3, 'text<a>text</a>'.split(/<(\/)?([^>]+)>/), ["text", void 0, "a", "text", "/", "a", ""]);
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
606 次 |
| 最近记录: |