regexp-to-ast

Parses a Regular Expression and outputs an AST

Usage no npm install needed!

<script type="module">
  import regexpToAst from 'https://cdn.skypack.dev/regexp-to-ast';
</script>

README

npm version CircleCI Coverage Status Greenkeeper badge

regexp-to-ast

Reads a JavaScript Regular Expression literal(text) and outputs an Abstract Syntax Tree.

Installation

  • npm
      npm install regexp-to-ast
    
  • Browser
      <script src="https://unpkg.com/regexp-to-ast/lib/parser.js"></script>
    

API

The API is defined as a TypeScript definition file.

Usage

  • Parsing to an AST:

    const RegExpParser = require("regexp-to-ast").RegExpParser
    const regexpParser = new RegExpParser.parser()
    
    // from a regexp text
    const astOutput = regexpParser.pattern("/a|b|c/g")
    
    // text from regexp instance.
    const input2 = /a|b/.toString()
    // The same parser instance can be reused
    const anotherAstOutput = regexpParser.pattern(input2)
    
  • Visiting the AST:

    // parse to an AST as before.
    const { RegExpParser, BaseRegExpVisitor } = require("regexp-to-ast")
    const regexpParser = new RegExpParser.parser()
    const regExpAst = regexpParser.pattern("/a|b|c/g")
    
    // Override the visitor methods to add your logic.
    class MyRegExpVisitor extends BaseRegExpVisitor {
        visitPattern(node) {}
    
        visitFlags(node) {}
    
        visitDisjunction(node) {}
    
        visitAlternative(node) {}
    
        // Assertion
        visitStartAnchor(node) {}
    
        visitEndAnchor(node) {}
    
        visitWordBoundary(node) {}
    
        visitNonWordBoundary(node) {}
    
        visitLookahead(node) {}
    
        visitNegativeLookahead(node) {}
    
        // atoms
        visitCharacter(node) {}
    
        visitSet(node) {}
    
        visitGroup(node) {}
    
        visitGroupBackReference(node) {}
    
        visitQuantifier(node) {}
    }
    
    const myVisitor = new MyRegExpVisitor()
    myVisitor.visit(regExpAst)
    // extract visit results from the visitor state.
    

Compatibility

This library is written in ES5 style and is compatiable with all major browsers and modern node.js versions.

TODO / Limitations