kingshuk basak kingshuk basak - 7 months ago 32
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.


You could use a positive lookahead for splitting.

With escaped backslash

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

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(/\|(?=\|)/);