regx

Tagged template string regular expression compiler.


Keywords
compiler, expression, regex, regexp, regular, rx, string, tag, tagged, template
License
MIT
Install
npm install regx@1.0.4

Documentation

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