What is @eslint-community/regexpp?
@eslint-community/regexpp is a utility library for parsing, analyzing, and transforming regular expressions. It is particularly useful for developers who need to work with regular expressions in a programmatic way, such as in linting tools, code editors, or other development tools.
What are @eslint-community/regexpp's main functionalities?
Parsing Regular Expressions
This feature allows you to parse a regular expression string into an Abstract Syntax Tree (AST). The AST can then be analyzed or transformed as needed.
const { parseRegExpLiteral } = require('@eslint-community/regexpp');
const ast = parseRegExpLiteral('/abc/');
console.log(JSON.stringify(ast, null, 2));
Validating Regular Expressions
This feature allows you to validate a regular expression string. If the regex is invalid, an error will be thrown, which can be caught and handled.
const { validateRegExpLiteral } = require('@eslint-community/regexpp');
try {
validateRegExpLiteral('/abc/');
console.log('Valid regex');
} catch (e) {
console.error('Invalid regex', e.message);
}
Traversing AST
This feature allows you to traverse the AST of a regular expression. You can define visitor functions that will be called for specific types of nodes in the AST.
const { parseRegExpLiteral, visitRegExpAST } = require('@eslint-community/regexpp');
const ast = parseRegExpLiteral('/abc/');
visitRegExpAST(ast, {
onCharacterClassEnter(node) {
console.log('Character class:', node);
}
});
Other packages similar to @eslint-community/regexpp
regexp-tree
regexp-tree is a similar library that provides tools for parsing, transforming, and analyzing regular expressions. It offers a more extensive set of transformations and optimizations compared to @eslint-community/regexpp.
regex-parser
regex-parser is a simpler library that focuses on parsing regular expressions into ASTs. It is less feature-rich compared to @eslint-community/regexpp but can be useful for basic parsing needs.
regexgen
regexgen is a library that generates regular expressions from a set of strings. While it does not offer parsing or validation, it is useful for creating regex patterns programmatically, which can complement the features of @eslint-community/regexpp.
A regular expression parser for ECMAScript.
💿 Installation
$ npm install @eslint-community/regexpp
- require Node@^12.0.0 || ^14.0.0 || >=16.0.0.
📖 Usage
import {
AST,
RegExpParser,
RegExpValidator,
RegExpVisitor,
parseRegExpLiteral,
validateRegExpLiteral,
visitRegExpAST
} from "@eslint-community/regexpp"
parseRegExpLiteral(source, options?)
Parse a given regular expression literal then make AST object.
This is equivalent to new RegExpParser(options).parseLiteral(source)
.
- Parameters:
source
(string | RegExp
) The source code to parse.options?
(RegExpParser.Options
) The options to parse.
- Return:
- The AST of the regular expression.
validateRegExpLiteral(source, options?)
Validate a given regular expression literal.
This is equivalent to new RegExpValidator(options).validateLiteral(source)
.
visitRegExpAST(ast, handlers)
Visit each node of a given AST.
This is equivalent to new RegExpVisitor(handlers).visit(ast)
.
RegExpParser
new RegExpParser(options?)
parser.parseLiteral(source, start?, end?)
Parse a regular expression literal.
- Parameters:
source
(string
) The source code to parse. E.g. "/abc/g"
.start?
(number
) The start index in the source code. Default is 0
.end?
(number
) The end index in the source code. Default is source.length
.
- Return:
- The AST of the regular expression.
parser.parsePattern(source, start?, end?, flags?)
Parse a regular expression pattern.
- Parameters:
source
(string
) The source code to parse. E.g. "abc"
.start?
(number
) The start index in the source code. Default is 0
.end?
(number
) The end index in the source code. Default is source.length
.flags?
({ unicode?: boolean, unicodeSets?: boolean }
) The flags to enable Unicode mode, and Unicode Set mode.
- Return:
- The AST of the regular expression pattern.
parser.parseFlags(source, start?, end?)
Parse a regular expression flags.
- Parameters:
source
(string
) The source code to parse. E.g. "gim"
.start?
(number
) The start index in the source code. Default is 0
.end?
(number
) The end index in the source code. Default is source.length
.
- Return:
- The AST of the regular expression flags.
RegExpValidator
new RegExpValidator(options)
validator.validateLiteral(source, start, end)
Validate a regular expression literal.
- Parameters:
source
(string
) The source code to validate.start?
(number
) The start index in the source code. Default is 0
.end?
(number
) The end index in the source code. Default is source.length
.
validator.validatePattern(source, start, end, flags)
Validate a regular expression pattern.
- Parameters:
source
(string
) The source code to validate.start?
(number
) The start index in the source code. Default is 0
.end?
(number
) The end index in the source code. Default is source.length
.flags?
({ unicode?: boolean, unicodeSets?: boolean }
) The flags to enable Unicode mode, and Unicode Set mode.
validator.validateFlags(source, start, end)
Validate a regular expression flags.
- Parameters:
source
(string
) The source code to validate.start?
(number
) The start index in the source code. Default is 0
.end?
(number
) The end index in the source code. Default is source.length
.
RegExpVisitor
new RegExpVisitor(handlers)
visitor.visit(ast)
Validate a regular expression literal.
📰 Changelog
🍻 Contributing
Welcome contributing!
Please use GitHub's Issues/PRs.
Development Tools
npm test
runs tests and measures coverage.npm run build
compiles TypeScript source code to index.js
, index.js.map
, and index.d.ts
.npm run clean
removes the temporary files which are created by npm test
and npm run build
.npm run lint
runs ESLint.npm run update:test
updates test fixtures.npm run update:ids
updates src/unicode/ids.ts
.npm run watch
runs tests with --watch
option.