Search code examples
javascriptregexregex-group

Regex to capture all vars between delimiters


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]));


Solution

  • 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.