Codebox Software

JavaScript Regular Expression Parser

Published:

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 (try changing the values in the green text boxes):

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 your own expression here:

Regular Expression:
Text: