/Regex

An attempt to create better Ruby/.Net-alike Regulare Expression library for JavaScript

Primary LanguageJavaScript

Regex

Build Status npm version Bower version

JavaScript Regular Expression Library for NodeJS and Browsers.

Features

  • Named Groups (?<name>expression), (?'name'expression)

  • Group index positions within the input

  • Named Backreferences \k<name>, \k'name'

  • Named subexpressions \g<name>

  • Comment Groups (?# my comment)

  • Atomic Groups (?>ab|c)

    Temporarly disabled for better performance. The group is converted into JS none-captured group.

  • Positive-/Negative Lookbehind (?<=expression) (?<!expression)

  • Anchors \A, \Z, \z, \G

  • Possessive Quantifiers ++ *+

  • Options

    • x : (?x) \\d #comment

    • i : a(?i)b(?-i)c(?i:hello)

      Temporarly disabled for better performance. The only first matched entry defines the flags for the expression

  • Unicode

    • \x{HEX} : \x{200D}
    • \p{CATEGORY} : \p{L}
  • POSIX

    • [:ascii:], [:^ascii:], etc
  • Characters class

    • intersection: [a-z&&[^c]]
  • Character types

    • (non-) hexadecimal : \h, \H

Named Groups

var rgx = new Regex('Name:\\s*(?<name>\\w+)');
var match = rgx.mach('My Name: Baz');
equals(match.groups.name, 'Baz');

API

Npm/Bower

$ npm i atma-regex -s
$ bower install atma-regex --save
var Regex = require('atma-regex');
var rgx = new Regex(pattern: string, flags: string);

Regex::

  • exec(input:string, index: number = this.lastMatch): JsMatch
  • match(input:string, index: number = this.lastMatch): RegexMatch
  • matches(input:string): RegexMatch[]
  • lastIndex: number

JsMatch::

Javascript-compatible result object with additional properties:

  • groups:Object: key-value. Named group values

RegexMatch::

  • value:string: full match
  • index:number: match index
  • groups?: RegexGroupMatch[]
  • groups[key]:string : Named group value

RegexGroupMatch::

  • value:string: full match
  • index:number: match index

Sample:

var Regex = require('atma-regex');
var rgx = new Regex('(?<=a)([pr])');
var match = rgx.match('-p--apa');

console.log(`Matches '${match.value}' at pos #${match.index}`);

Live example

See more examples in tests


©️ MIT