node package manager
Easy sharing. Manage teams and permissions with one click. Create a free org »

regx

regx

NPM version Downloads Tip

Tagged template string regular expression compiler. Supports multiline expressions, partials, and embedded comments.

Install

$ npm install --save regx

Example

import regx from 'regx';
 
// RegExp partial to match opening block comment (flags ignored) 
const openPartial = /\/\*\*/i;
 
// String partial to match closing block comment (extra escaping required) 
const closePartial = '\\*\\/';
 
// Time to write a human-readable expression 
const expression = regx('gm')`
    // Match a non-recursive block comment
    (
        // Must be first thing on a line
        ^[\t ]*
 
        ${openPartial} // Block opener
 
        // Capture content independently
        (
            // Match any character including newlines (non-greedy)
            [\s\S]*?
        )
 
        ${closePartial} // Block closer
    )
 
    // Grab trailing newlines and discard them
    [\r\n]*
`;
 
// The result is the same as if you had written the following 
const expression = /(^[\t ]*\/\*\*([\s\S]*?)\*\/)[\r\n]*/gm;

API

regx([flags]) : regxTagFunction

Creates a template-string tag function. Optionally accepts RegExp flags.

const a = regx('gm')`
    ^  // start of line
    a+ // one or more 'a' characters
    $  // end of line
`; // result: /^a+$/gm 

regxTagFunction(strings, ...values) : RegExp

The functions returned by regx() may be cached and reused.

const rx = regx('gm');
 
const a = rx`
    ^  // start of line
    a+ // one or more 'a' characters
    $  // end of line
`; // result: /^a+$/gm 
 
const b = rx`
    ^  // start of line
    b+ // one or more 'b' characters
    $  // end of line
`; // result: /^b+$/gm 

All whitespace at the beginning and end of each line is ignored. To match literal whitespace at the beginning or end of a line you must use a character set.

const rx = regx('i');
 
const spaceBefore = rx`
    [ ]foo bar
`; // result: /[ ]foo bar/i 
 
const spaceAfter = rx`
    foo bar[ ]
`; // result: /foo bar[ ]/i 

© 2016 Shannon Moeller me@shannonmoeller.com

Licensed under MIT