heregex
v1.0.1
Published
ES6 tagged template to make regular expressions more easily readable.
Downloads
12
Readme
heregex
ES6 tagged template to make regular expressions more easily readable.
Add comments using the #
character prefixed with a space. All whitespace gets
removed (so use \s
for actual whitespace matching). Any flags go in ${'gim'}
at the end of the string.
Examples
heregex = require('heregex')
let regex_github_repo = heregex`
^ # start of string
(?:https?:\/\/)? # optional http/https
(?:www\.)? # optional "www."
github\.com # website address
\/
([a-z0-9_-]+) # username ($1)
\/
([a-z0-9_-]+) # repo ($2)
(?:\.git)? # optional .git
${'i'}
`;
Which creates this end result:
/^(?:https?:\/\/)?(?:www\.)?github\.com\/([a-z0-9_-]+)\/([a-z0-9_-]+)(?:\.git)?/i
The end result of that example is still readable, but if you're doing even slightly more complex regular expressions, multiple lines with comments becomes a lot easier to read:
heregex = require('heregex')
let regex_number = heregex`
^0b[01]+ # binary
| ^0o[0-7]+ # octal
| ^0x[0-9a-f]+ # hex
| ^\d*\.?\d+ (?:e[+-]?\d+)? # decimal
${'i'}
`;
which compiles down to the harder to read version:
/^0b[01]+|^0o[0-7]+|^0x[0-9a-f]+|^\d*\.?\d+(?:e[+-]?\d+)?/i
Installation
npm install --save heregex
or
yarn add heregex
If you'd like to use it without requiring it everywhere, you can add it to the list of node globals:
global.heregex = require('heregex');
Questions
How do I make a literal #
?
Get rid of any whitespace immediately preceding it. For heregex to consider
something a comment, it must have a space before the #
or be the first
character on a new line. If you need the space or if its the first character on
a new line, escape it to \#
. \#
gets passed through directly as \#
.
This is not an issue, since an escaped #
is still #
.
let regex_basic_css_selector = heregex`
^\.([_a-z][_a-z0-9-]*) # classname
| ^#([_a-z][_a-z0-9-]*) # id
| ^([a-z0-9]+) # type
${'i'}
`;
which evaluates to:
/^\.([_a-z][_a-z0-9-]*)|^#([_a-z][_a-z0-9-]*)|^([a-z0-9]+)/i