Looking at this sample :
>'1,2,3,4,5'.split(/,/)
Result : ["1", "2", "3", "4", "5"]
But looking at this sample :
>'1,2,3,4,5'.split(/(,)/)
Result : ["1", ",", "2", ",", "3", ",", "4", ",", "5"]
From MDN :
If separator is a regular expression that contains capturing parentheses, then each time separator is matched, the results (including any undefined results) of the capturing parentheses are spliced into the output array. However, not all browsers support this capability.
Question :
Where can I find the list of browsers ( and versions) which supports that feature.
mdn doesn't expose that info.
From the blog of Steven Levithan and XRegExp website, it is confirmed that the correct behavior (inclusion of text captured by capturing groups in the result array) is not implemented up to Internet Explorer 8.
I have independently confirmed this result on browserstack, and further confirmed that the behavior of String.split
when a regex with capturing group is supplied is correctly implemented for Internet Explorer only from version 10 onwards.
Below are links to relevant screenshots:
Full source code of the test site:
<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>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With