kingshuk basak kingshuk basak - 4 months ago 13
Javascript Question

Use of capturing group in .split() function

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.

Answer

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 | literally

Basically it looks for a pipe, and splits if another pipe is following.

var a = 'abc\&|\|cba';
var b = a.split(/\|(?=\|)/);
console.log(b);