ballerina-lang
ballerina-lang copied to clipboard
[Bug]: Ballerina regex:split() function behave Incorrectly for empty regex patterns
trafficstars
Description
Ballerina regex:split() function behave differently than Javascript regex:split() function for empty regex patterns such as
- re `()`
- re `${""}`
- re `a|`
Since Ballerina regular expressions are defined by reference to the ECMAScript language specification, It is better to behave same as Javascript language.
- re `()`
Ballerina behaviour
public function main() {
string str = "abc";
string[] resArr = re `()`.split(str);
io:println(resArr.length()); // 4
io:println(resArr); // ["a","b","c",""]
}
Javascript Behaviour
const re1 = new RegExp("()");
var a = "abc".split(re1);
console.log(a.length); // 5
console.log(a); // [ 'a', '', 'b', '', 'c' ]
- re `${""}`
Ballerina behaviour
public function main() {
string str = "abc";
string[] resArr = re `${""}`.split(str);
io:println(resArr.length()); // 4
io:println(resArr); // ["a","b","c",""]
}
Javascript Behaviour
const re1 = new RegExp("");
var a = "abc".split(re1);
console.log(a.length); // 3
console.log(a); // [ 'a', 'b', 'c' ]
- re `a|`
Ballerina behaviour
public function main() {
string str = "abc";
string[] resArr = re `a|`.split(str);
io:println(resArr.length()); // 5
io:println(resArr); // ["","","b","c",""]
}
Javascript Behaviour
const re1 = new RegExp("a|");
var a = "abc".split(re1);
console.log(a.length); // 3
console.log(a); // [ '', 'b', 'c' ]
Steps to Reproduce
No response
Affected Version(s)
No response
OS, DB, other environment details and versions
No response
Related area
-> Compilation
Related issue(s) (optional)
No response
Suggested label(s) (optional)
No response
Suggested assignee(s) (optional)
No response