Simple Regex Builder
A human-friendly regex builder.
Installation
npm i @hishprorg/blanditiis-perspiciatis-omnis
Usage
Importing
ES modules
import { REGEX, SimpleRegexBuilder } from '@hishprorg/blanditiis-perspiciatis-omnis';
CommonJS modules
const { REGEX, SimpleRegexBuilder} = require('@hishprorg/blanditiis-perspiciatis-omnis');
SimpleRegexBuilder
A SimpleRegexBuilder is a mutable builder object.
const r = new SimpleRegexBuilder().global().ignoreCase();
r.startsWith('a')
.add(REGEX.BETWEEN_N_AND_M(1, 3, REGEX.ANY_WHITESPACE))
.endsWith('b');
console.log(r.toString());
The regex object's sequence can be manipulated with the startsWith
, endsWith
, add
and followedBy
.
For convenience, the add
and followedBy
methods are synonymous.
end
is the equivalent of endsWith('')
.
The regex modifiers can be manipulated with global
, ignoreCase
, multiline
and unicode
, which all receive a boolean parameter that defaults to true
.
NOTE: The sticky
modifier and lastIndex
property of RegExp
don't really make sense for a builder, if you need that functionality just build
a RegExp
object as described below and use that instead.
To reuse a partially developed builder, provide it as the argument to a new object's constructor, or use the clone
method directly:
const base = new SimpleRegexBuilder().startsWith('abc');
const caseInsensitiveMatcher = new SimpleRegexBuilder(base).ignoreCase();
console.log(caseInsensitiveMatcher.toString());
const globalMatcher = base.clone().global();
console.log(globalMatcher.toString());
Building a RegExp
object is done with either of the synonymous build
or toRegExp
methods:
const r = new SimpleRegexBuilder().add("rain").build();
const s = new SimpleRegexBuilder().add("spain").toRegExp();
For convenience, the RegExp
class's exec
, test
and toString
methods can be called directly on the SimpleRegexBuilder
itself:
const r = new SimpleRegexBuilder().add("ain");
console.log(r.test('The rain in Spain falls mainly on the plain.'));
console.log(r.exec('The rain in Spain falls mainly on the plain.'));
REGEX
The REGEX
object includes both constants and functions that accept strings, RegExp
and SimpleRegexBuilder
objects.
The REGEX
object is a set of key/value pairs, where some of the values are strings and some of them functions.
console.log(REGEX.ANY_CHARACTER);
console.log(REGEX.CHARACTERS_IN_SET("a-z0-9"));
Brackets
Key | Value | Description |
---|
CHARACTERS_IN_SET | ("abc") => "[abc]" | Find any character between the brackets |
CHARACTERS_NOT_IN_SET | ("abc") => "[^abc]" | Find any character NOT between the brackets |
IN_SET | ("abc","d[ef]*") => "(abc|d[ef]*)" | Find any of the alternatives specified |
Metacharacters
Key | Value | Description |
---|
ANY_CHARACTER or ANY | . | Find a single character, except newline or line terminator |
WORD_CHARACTER or WORD | \w | Find any word character, equivalent to [a-zA-Z_0-9] |
NON_WORD_CHARACTER or NON_WORD | \W | Find a non-word character, equivalent to [^a-zA-Z_0-9] |
DIGIT | \d | Find a digit |
NON_DIGIT | \D | Find a non-digit character |
WHITESPACE | \s | Find a whitespace character |
NON_WHITESPACE | \S | Find a non-whitespace character |
MATCH_WORD_BEGINNING_WITH | ("word") => "\bword" | Find a match at the beginning of a word |
MATCH_WORD_ENDING_WITH | ("word") => "word\b" | Find a match at the end of a word |
MATCH_WORD_BEGINNING_AND_ENDING_WITH | ("word") => "\bword\b" | Find a match for the whole word |
MATCH_WORD_NOT_BEGINNING_WITH | ("word") => "\Bword" | Find a match for the word, but not if it's at the beginning of a word |
MATCH_WORD_NOT_ENDING_WITH | ("word") => "word\B" | Find a match for the word, but not if it's at the end of a word |
MATCH_WORD_NOT_BEGINNING_OR_ENDING_WITH | ("word") => "\Bword\B" | Find a match for the word, but not if it's at the beginning or end of a word |
NULL_CHARACTER or NULL | \0 | Find a NULL character |
NEW_LINE | \n | Find a new line character |
FORM_FEED | \f | Find a form feed character |
CARRIAGE_RETURN | \r | Find a carriage return character |
TAB | \t | Find a tab character |
VERTICAL_TAB | \v | Find a vertical tab character |
OCTAL_NUMBER or OCT | ("17") => "\17" | Find the character specified by the given octal number |
HEXADECIMAL_NUMBER or HEX_NUMBER or HEX | ("1a") => "\x1a" | Find the character specified by the given hexadecimal number |
UNICODE_CHARACTER or UNICODE | ("1F1EE", "1F1F1") => "\u{1F1EE}\u{1F1F1}" | Find the Unicode character specified by a given hexadecimal number / numbers WARNING: the unicode modifier must be provided in order for this to match |
Quantifiers
Quantifier methods accept regex in the form of strings, RegExp
objects and SimpleRegexBuilder
objects.
If the length of the given argument is greater than 1 then it will be enclosed in brackets, eg. ("n") => "n*"
but ("abc") => "(abc)*"
.
Key | Value | Description |
---|
ONE_OR_MORE or AT_LEAST_ONE | ("n") => "n+" , | Matches any string that contains at least one n |
ZERO_OR_MORE | ("n") => "n*" | Matches any string that contains zero or more occurrences of n |
ZERO_OR_ONE or OPTIONAL | ("n") => "n?" | Matches any string that contains zero or one occurrences of n |
EXACTLY_X or EXACTLY_N or EXACTLY | (2, "n") => "n{3}" | Matches any string that contains a sequence of X n's |
BETWEEN_X_AND_Y or BETWEEN_N_AND_M or BETWEEN: (1, 3, "n") => "n{1,3}" | Matches any string that contains a sequence of X to Y n's | |
AT_LEAST_X or AT_LEAST_N or AT_LEAST | (1, "n") => "n{1,}" | Matches any string that contains a sequence of at least X n's |
IS_FOLLOWED_BY or FOLLOWED_BY | ("\s+term") => "(?=\s+term)" | Matches any string that is followed by a specific string n |
IS_NOT_FOLLOWED_BY or NOT_FOLLOWED_BY | ("\s+term") => "(?!\s+term)" | Matches any string that is followed by a specific string n |
License
MIT
ALL CONTRIBUTIONS AND FEEDBACK WELCOME