Package Exports
- regexp-tree
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (regexp-tree) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
regexp-tree
Regular expressions parser
Table of Contents
Installation
The parser can be installed as an NPM module:
npm install -g regexp-tree
regexp-tree --help
Development
- Fork https://github.com/DmitrySoshnikov/regexp-tree repo
- Make your changes
- Make sure
npm test
still passes (add new tests if needed) - Submit a PR
The regexp-tree parser is implemented as an automatic LR parser using Syntax tool. The parser module is generated from the regexp grammar, which is based on the regular expressions grammar used in ECMAScript.
For development from the github repository, run build
command to generate the parser module:
git clone https://github.com/<your-github-account>/regexp-tree.git
cd regexp-tree
npm install
npm run build
./bin/regexp-tree --help
NOTE: You need to run
build
command every time you change the grammar file.
Usage as a CLI
Check the options available from CLI:
regexp-tree --help
Usage: regexp-tree [options]
Options:
-e, --expression A regular expression to be parsed
-l, --loc Whether to capture AST node locations
To parse a regular expression, pass -e
option:
regexp-tree -e '/a|b/i'
Which produces an AST node corresponding to this regular expression:
{
"type": "RegExp",
"body": {
"type": "Disjunction",
"left": {
"type": "Char",
"value": "a",
"kind": "simple"
},
"right": {
"type": "Char",
"value": "b",
"kind": "simple"
}
},
"flags": [
"i"
]
}
Usage from Node
The parser can also be used as a Node module:
const regexpTree = require('regexp-tree');
const regexpString = (/a|b/i).toString();
console.log(regexpTree.parse(regexpString)); // RegExp AST
Capturing locations
For source code transformation tools it might be useful also to capture locations of the AST nodes. From the command line it's controlled via the '-l' option:
regexp-tree -e '/ab/' -l
This attaches loc
object to each AST node:
{
"type": "RegExp",
"body": {
"type": "Alternative",
"expressions": [
{
"type": "Char",
"value": "a",
"kind": "simple",
"loc": {
"start": 1,
"end": 2
}
},
{
"type": "Char",
"value": "b",
"kind": "simple",
"loc": {
"start": 2,
"end": 3
}
}
],
"loc": {
"start": 1,
"end": 3
}
},
"flags": [],
"loc": {
"start": 0,
"end": 4
}
}
From Node it's controlled via setOptions
method exposed on the parser:
const regexpTree = require('regexp-tree');
const parsed = regexpTree
.setOptions({captureLocations: true})
.parse('/a|b/');
NOTE: the format of a regexp should be
/Body/Flags
. The flags can be optional.
AST nodes specification
Below are the AST node types corresponding to different regular expressions sub-patterns:
TODO