A regular expression parser written in JavaScript
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
test
.gitignore
LICENSE
README.md
grammar.js
handlers.js
parser.js
regex.js
utils.js

README.md

regex_parser

This is a regular expression parser, written in JavaScript as a learning exercise - if you need to parse a regular expression in JavaScript you should of course use the built-in RegExp class, and not this implementation.

This library implements a backtracking recursive descent parser and uses this grammar to construct a parse tree from the regular expression text that you supply. The parse tree is encapsulated within a regex object, and returned by the parse.compile() function. The regex object exposes a match() method that can be used to test string values against the expression. The result of a match is contained within an object that has a matches property, set to either true or false to indicate whether the match succeeded or not.

var regex, match;
regex = parser.compile('abc+');
match = regex.match('abccc'); // match.matches = true
match = regex.match('abcd');  // match.matches = false

The library supports the following symbols:

Symbol Example
* (zero or more) abc*
+ (one or more) abc+
? (zero or one) abc?
. (any single character) a.b.c
[ ] (inclusive character specification) [A-C][a-c][123]
[^ ] (exclusive character specification) [^A-C][^a-c][^123]
{ } (exact number of matches) a{5}
{ , } (range of matches) a{3,5}
{ ,} (lower bounded number of matches) a{3,}
| (alternatives) dog|cat|hamster
() (parentheses) d(i|u|o)g
() \1 (capturing groups) (1|2|3)==\1
\s and \S (whitespace/non-whitespace alias) \S\s\S\s\S
\d and \D (digit/non-digit alias) \d\D\d

You can try some live examples on the project homepage