2.0.2 • Published 3 years ago
regexp-coder v2.0.2
regexp-coder
Building readable JavaScript/TypeScript regular expressions gracefully.
API Documentation
RegExp Coder API Documentation
Introduction
The regexp-coder is using fluent APIs (with nested parameters) to help you to build regular expressions in a readable way.
- Sample: Check IPv4
Let's see how to use the util to define a IPv4 address in decimal number.
IPv4 address is presented in format of: <0-255>.<0-255>.<0-255>.<0-255>
.
There are two elements, one is decimal number which is from 0 to 255, and another element is .
.
We can define the decimal part as subIP: /\d|\d\d|[1]\d\d|2[0-4]\d|25[0-5]/
and the do element as dot: /\./
For example:
import { RegExpCoder } from 'regexp-coder';
const subIP = /(\d|\d\d|1\d\d|2[0-4]\d|25[0-5])/;
const dot = /\./;
const ipv4Exp = RegExpCoder.new()
.join(
subIP,
dot,
subIP,
dot,
subIP,
dot,
subIP,
)
.enableMatchWhole()
.toRegExp();
console.log(ipv4Exp.test('192.168.0.1')); // true
console.log(ipv4Exp.test('192-168-0-1')); // false
- If you like fluent API, you can use the define-build pattern.
You can define elements sub-ip
and dot
as variables and use them later.
For example:
import { RegExpCoder } from 'regexp-coder';
const ipv4Exp = RegExpCoder.new()
.define('sub-ip', /(\d|\d\d|1\d\d|2[0-4]\d|25[0-5])/)
.define('dot', /\./)
.join(
'sub-ip',
'dot',
'sub-ip',
'dot',
'sub-ip',
'dot',
'sub-ip',
)
.enableMatchWhole()
.toRegExp();
console.log(ipv4Exp.test('192.168.0.1')); // true
console.log(ipv4Exp.test('192-168-0-1')); // false
- For complex variables, you use build-stash-build pattern.
The
stash()
method will save the current result as a variable, then get the object cleared.
For example:
import { RegExpCoder } from 'regexp-coder';
const ipv4Exp = RegExpCoder.new()
.group(
RegExpCoder.new().or(
/\d/,
/\d\d/,
/1\d\d/,
/2[0-4]\d/,
/25[0-5]/,
),
)
.stash('sub-ip')
.define('dot', /\./)
.join(
'sub-ip',
'dot',
'sub-ip',
'dot',
'sub-ip',
'dot',
'sub-ip',
)
.enableMatchWhole()
.toRegExp();
console.log(ipv4Exp.test('192.168.0.1')); // true
console.log(ipv4Exp.test('192-168-0-1')); // false
Main classes
RegExpCoder
Method | Description |
---|---|
static methods: | |
encodeRegExp | Encode a raw string to a regular expression string. |
For example, it will convert . -> \. | |
new() | Create an instance of RegExpCoder |
instance methods: | |
join() | Append an expression, .e.g xyz |
group() | Append a group expression, e.g. (xyz) |
or() | Append an or expression, e.g. x|y|z) |
set() | Append a set expression, e.g. [xyz] |
negatedSet() | Append a negated set expression, e.g. [^xyz] |
lookahead() | Append a lookahead expression, e.g. x(?=y) |
negatedLookahead() | Append a negated lookahead expression, e.g. x(?!y) |
lookbehind() | Append a lookbehind expression, e.g. (?<=y)x |
negatedLookbehind() | Append a negated lookbehind expression, e.g. (?<!y)x |
define() | Define an expression, .e.g xyz |
defineGroup() | Define a group expression, e.g. (xyz) |
defineOr() | Define an or expression, e.g. x|y|z) |
defineSet() | Define a set expression, e.g. [xyz] |
defineNegatedSet() | Define a negated set expression, e.g. [^xyz] |
defineLookahead() | Define a lookahead expression, e.g. x(?=y) |
defineNegatedLookahead() | Define a negated lookahead expression, e.g. x(?!y) |
defineLookbehind() | Define a lookbehind expression, e.g. (?<=y)x |
defineNegatedLookbehind() | Define a negated lookbehind expression, e.g. (?<!y)x |
stash() | Define an expression from the current state. |
source | Get the source of the current state. |
toRegExp() | Get the RegExp instance of the current state. |
enableMatchWhole | Enable the expression to match the whole string. e.g. ^x$ |
beginGroup | Begin a group expression. e.g. ( |
endGroup | End the group expression, e.g. ')' |
RegExpOptions
For example:
import { RegExpCoder } from 'regexp-coder';
const group = true;
const ipv4Exp = RegExpCoder.new()
.or(
/\d/,
/\d\d/,
/1\d\d/,
/2[0-4]\d/,
/25[0-5]/,
{ group }, // <-- Use options here
)
.stash('sub-ip')
.define('dot', /\./)
.join(
'sub-ip',
'dot',
'sub-ip',
'dot',
'sub-ip',
'dot',
'sub-ip',
)
.enableMatchWhole()
.toRegExp();
console.log(ipv4Exp.test('192.168.0.1')); // true
console.log(ipv4Exp.test('192-168-0-1')); // false
Members | Description |
---|---|
qualifier | (xyz)* , Define qualifier for the current expression |
groupQualifiedItem | (xyz)* , If need to add a group before the qualifier for the current expression |
notRememberQualifiedItem | (?:xyz)* , If need not to remember the qualifier group for the current expression |
groupItem | (x)(y)(z) , If need to add a group for each items of the current expression |
group | (xyz) , If need to add a group for the current expression |
name | (?name:xyz)* , name for the group |
notRemember | (?:xyz) , If need not to remember the group for the current expression |
or | x|y|z , If use the or operation for the items in the expression |
set | [xyz] , If use the set operation for the items in the expression |
negated | [^xyz] , If use the negated set operation for the items in the expression |
RegExpSpec
This is one to one members of Regular Expressions.