ballerina-lang icon indicating copy to clipboard operation
ballerina-lang copied to clipboard

[Bug]: Ballerina regex:split() function behave Incorrectly for empty regex patterns

Open SasinduDilshara opened this issue 2 years ago • 0 comments
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.

  1. 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' ]
  1. 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' ]
  1. 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

SasinduDilshara avatar Mar 08 '23 10:03 SasinduDilshara