I am trying to split a string and leave the delimiter intact. I am getting pretty close but I can't figure it out fully. I have found a lot of examples on Stack Overflow but I am still running in to an issue that I can't figure out. Here is the code:
"This is a string with ${G:VarSome:G} text".split(/\$\{(. ?(}\(. ?\)|}))/g)
The above code yields:
['This is a string with ', 'G:VarSome:G}', '}', ' text']
The result I am looking for is:
['This is a string with ', '${G:VarSome:G}', ' text']
The ${G:SomeVar:G} pattern is a templating system where variables will be injected. There are other formats of variables too for example ${G:AnotherVar:1}, ${G:DifferentVar:5} etc. After I get the split string, I will do a variable lookup in the system to inject the corresponding variable.
CodePudding user response:
You are having an extra capture group inside the regex, this will give you a single group.
/(\$\{. ?})/g
This should capture the examples provided. regex101
const result = "This is a string with ${G:VarSome:G} text".split(/(\$\{. ?})/g);
console.log(result);
CodePudding user response:
You can use this regex for splitting:
/(\${[^}]*})/
Code:
var s = 'This is a string with ${G:VarSome:G} text';
var arr = s.split(/(\${[^}]*})/);
console.log(arr);
Here:
\${[^}]*}
: Will match${
followed by 0 or more non-}
characters followed by}