readable-regexp
TypeDocGitHubnpm
  • readable-regexp
  • Getting Started
    • Installation
    • Usage
  • API Reference
    • Character Classes
    • Anchors
    • Special Tokens
    • Quantifiers
    • Groups
    • Extras
    • TypeDoc
  • Custom Extensions
    • Custom Tokens
      • Step 1: Type Definition
      • Step 2: Implementation
      • Step 3: Usage
Powered by GitBook
On this page
  • Quick Example
  • Syntax Rules
  1. Getting Started

Usage

Quick Example

import { lineStart, oneOf } from 'readable-regexp';

const regExp = lineStart
    .captureAs`filename`.oneOrMore.char
    .exactly`.`
    .captureAs`extension`(
        oneOf`ts``js`
        .maybe`x`
    )
    .lineEnd
    .toRegExp();
    
console.log(regExp); // /^(?<filename>.+)\.(?<extension>(?:ts|js)x?)$/

regExp.test('readable-regexp.ts');

Syntax Rules

readable-regexp has a super flexible syntax. Most of the rules listed here are optional shorthands for your convenience rather than strict requirements.

  • Chain function calls with . to represent consecutive tokens.

    • exactly`fo`.maybe`o` = foo?

  • Using a tagged template literal is equal to calling the function with one string argument. Interpolation also works in the tagged template literals.

    • exactly`foo` = exactly('foo')

    • exactly`foo${someVar}` = exactly('foo' + someVar)

  • Chaining function calls is equal to calling the function with multiple arguments.

    • oneOf`foo` `bar` `baz` = oneOf('foo')('bar')('baz') = oneOf('foo', 'bar', 'baz')

    • oneOf`foo` `bar` (maybe.digit) = oneOf('foo', 'bar', maybe.digit)

  • All expressions can be coerced to string. This is especially useful in character classes.

    • charIn`${word}-.` = charIn`\w-.`

  • If a function expects an expression and your expression consists of 1 token only, you can chain the call to omit the bracket.

    • oneOrMore(word) = oneOrMore.word

    • maybe(not(digit)) = maybe.not.digit

  • All group constructs accept string literals as well as expressions, and you can use tagged template literals to omit the bracket.

    • capture(exactly('foo')) = capture`foo`

  • All expressions are immutable. You can freely extract and reuse them.

const num = oneOrMore.digit;
const decimal = match(num).exactly`.`.match(num);
const integer = num.notAhead`.`; 
  • If you prefer, you may prefix all expressions with r. to avoid having to import all functions separately.

import { r } from 'readable-regexp';

const regExp = r.oneOrMore(r.exactly`fo`.maybe`o`);
import { oneOrMore, exactly } from 'readable-regexp';

const regExp = oneOrMore(exactly`fo`.maybe`o`);
PreviousInstallationNextCharacter Classes

Last updated 1 year ago