Home > database >  Regex to capture all vars between delimiters
Regex to capture all vars between delimiters

Time:09-15

How do I capture all 1, 2 and 3 in not |1|2|3|

My regex \|(.*?)\| skips 2.

const re = /\|(.*?)\|/gi;
const text = 'not |1|2|3|'

console.log(text.match(re).map(m => m[1]));

CodePudding user response:

You can use

const re = /\|([^|]*)(?=\|)/g;
const text = 'not |123|2456|37890|'

console.log(Array.from(text.matchAll(re), m => m[1]));

Details:

  • \| - a | char
  • ([^|]*) - Group 1: zero or more chars other than |
  • (?=\|) - a positive lookahead that matches a location that is immediately followed with |.

If you do not care about matching the | on the right, you can remove the lookahead.

If you also need to match till the end of string when the trailing | is missing, you can use /\|([^|]*)(?=\||$)/g.

  • Related