Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/daiyam/node-regexp
RegExp parser/formatter/visitor/transformer
https://github.com/daiyam/node-regexp
regex
Last synced: about 1 month ago
JSON representation
RegExp parser/formatter/visitor/transformer
- Host: GitHub
- URL: https://github.com/daiyam/node-regexp
- Owner: daiyam
- License: mit
- Created: 2021-05-04T23:40:07.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2022-06-04T21:04:36.000Z (over 2 years ago)
- Last Synced: 2024-08-11T08:08:47.034Z (4 months ago)
- Topics: regex
- Language: JavaScript
- Homepage:
- Size: 56.6 KB
- Stars: 2
- Watchers: 2
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[@daiyam/regexp](https://github.com/daiyam/node-regexp)
======================================================================[![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE)
[![NPM Version](https://img.shields.io/npm/v/@daiyam/regexp.svg?colorB=green)](https://www.npmjs.com/package/@daiyam/regexp)With `@daiyam/regexp`, you can parse a regular expression to get an AST. Then you can visit, transform or/and translate the ast. When you have finished your edits, you can stringify the AST to get a string to create a `RegExp`.
Getting Started
---------------With [node](http://nodejs.org) previously installed:
npm install @daiyam/regexp
```typescript
import { escape, parse, stringify, translate, visit, Flavor, Token, TokenType } from '@daiyam/regexp'function listCaptureGroups(regex: string): Token[] {
const ast = parse(regex);const groups: Token[] = [];
visit(ast.body, {
[TokenType.CAPTURE_GROUP](token) {
groups.push(token);
}
});return groups;
}function toES2018(source: string): RegExp {
return new RegExp(translate(source, Flavor.ES2018));
}
```Syntax
------The library is supporting ES2018 syntax and some elements of PCRE2 syntax.
| Characters / constructs | Corresponding article |
| ---------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| `\`, `.`, `\cX`, `\d`, `\D`, `\f`, `\n`, `\r`, `\s`, `\S`, `\t`, `\v`, `\w`, `\W`, `\0`, `\xhh`, `\uhhhh`, `\uhhhhh`, `[\b]` | [Character classes (MDN)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Character_Classes) |
| `^`, `$`, `x(?=y)`, `x(?!y)`, `(?<=y)x`, `(?x)`, `x\|y`, `[xyz]`, `[^xyz]`, `\Number` | [Groups and ranges (MDN)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Groups_and_Ranges) |
| `*`, `+`, `?`, `x{n}`, `x{n,}`, `x{n,m}` | [Quantifiers (MDN)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Quantifiers) |
| `\p{UnicodeProperty}`, `\P{UnicodeProperty}` | [Unicode property escapes (MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Unicode_Property_Escapes) |
| `(?imsxUJX-imsxUJX)x`, `(?i:x)y` | [Option Setting (PCRE)](https://mariadb.com/kb/en/pcre/#option-setting) |API
---### parse(value: string | RegExp) => Token
with `interface Token`, parse the `value` to generate an AST tree.
### stringify(tokens?: Token | Token[] | RegExp) => string
generate a string based on the given AST tokens.
### visit(tokens?: Token | Token[], callback?: { [TokenType: string]: Visitor } | Visitor) => void
with `type Visitor = (token: Token) => void`, call the `callback` when iterating the given AST tokens
### transform(tokens?: Token | Token[], callback?: { [TokenType: string]: Transformer } | Transformer) => void
with `type Transformer = (token: Token, parent: Token | null, key: string | null, index: number | null) => void`, call the `callback` when iterating the given AST tokens.
The `this` context of the `callback` with have the following functions:- `this.remove() => void`: remove the current token
- `this.replace(token: string | Token | Token[], transform?: boolean) => void`: replace the current token with the given token(s). If `transform` is true, then the new token(s) are going to be transformed.
- `this.transform(tokens: Token | Token[], parent?: Token, key?: string) => void`: run the tranformation on the given token(s).### translate(value: string | RegExp | Token | Token[], target: Flavor, toString?: boolean = true) => string | Token | Token[]
translate a regex for the `target` regexp language.
```typescript
function toES2018(source: string): RegExp {
return new RegExp(translate(source, Flavor.ES2018));
}
```| Supported Flavors |
| ----------------- |
| `ES2018` |### escape(value: string) => string
escape the RegExp special characters from the `value`.
### isRegExp(value: any) => boolean
determine if the `value` is a RexExp or not.
License
-------Copyright © 2021 Baptiste Augrain
Licensed under the [MIT license](http://www.opensource.org/licenses/mit-license.php).