I have a string and i want to split it into array using the '|' character but not '\|':
var a = 'abc\&|\|cba';
var b = a.split(/([^\\])\|/);
result :
b = ["abc", "&", "|cba"]
expected output :
b = ["abc\&", "\|cba"]
Basically I cannot use capturing groups in .split() function properly.
You could use a positive lookahead for splitting.
With escaped backslash
var a = 'abc\\&|\\|cba';
var b = a.split(/\|(?=\\)/);
console.log(b);
Without escaped backslash
/\|(?=\|)/
\|
matches the character |
literally
(?=\|)
Positive Lookahead - Assert that the regex below can be matched
\|
matches the character |
literallyBasically it looks for a pipe, and splits if another pipe is following.
var a = 'abc\&|\|cba';
var b = a.split(/\|(?=\|)/);
console.log(b);