Skip to content

Latest commit

 

History

216 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

rregex

A dependency-free WebAssembly build of Rust Regex for Javascript

GitHub Actions Workflow Status GitHub Release NPM Version JSR

Why Rust Regex

Rust has a powerful Regex library with a lot of features that don't exists en the standard Regex object

See the official documentation for more detail

Install

  # NPM
  npm install rregex

  # Yarn
  yarn add rregex

  # PNPM
  pnpm add rregex

  # Deno
  deno add @rregex/rregex

  # JSR
  npx jsr add @rregex/rregex

Supported Runtimes

This package includes builds for multiple runtimes

Runtime Import version
Node.js (esm) import { RRegex, RRegexSet } from 'rregex' *
Node.js (commonjs) const { RRegex, RRegexSet } = require('rregex') *
Deno import { RRegex, RRegexSet } from '@rregex/rregex' >=1.10.8
Bun import { RRegex, RRegexSet } from '@rregex/rregex' >=1.10.8
Cloudflare Workers import { RRegex, RRegexSet } from 'rregex/lib/cf.mjs' >=1.10.8
Browser TODO
Standalone TODO

Benchmarks

In general terms rregex is at least 1 order of magnitud slower than the native RegExp object, but still have a good performance. Unless you required some of the features that rregex provides, you should always consider using the native RegExp object

Benchmarks are executed using test/deno.bench.mjs, and test/node.bench.mjs

Email

benchmark time (avg) iter/s
RegExp 254.8 µs/iter 3,925.0
RRegex 1.7 ms/iter 589.9

summary: RegExp is 6.65x faster than RRegex

IP

benchmark time (avg) iter/s
RegExp 39.1 µs/iter 25,600.0
RRegex 1.4 ms/iter 698.1

summary: RegExp is 36.67x faster than RRegex

URI

benchmark time (avg) iter/s
RegExp 422.7 ns/iter 2,366,000.0
RRegex 1.5 ms/iter 652.6

summary: RegExp is 3625x faster than RRegex

benckmarks benckmarks
Simple IP IP
email URI

Note: In order to compare with native regex these benchmarks follow the mariomka/regex-benchmark structure

Known Issues

If you call splitn(text, limit) and the expected result length is equal to limit - 1 the result will include an extra item "", this behavior does not happen if limit es greater. fixed at >=1.3

const regex = new RRegex(",");
expect(regex.splitn("a,b,c", 0)).toEqual([]);
expect(regex.splitn("a,b,c", 1)).toEqual(["a,b,c"]);
expect(regex.splitn("a,b,c", 2)).toEqual(["a", "b,c"]);
expect(regex.splitn("a,b,c", 3)).toEqual(["a", "b", "c"]);

// This result includes an unexpected extra item
expect(regex.splitn("a,b,c", 4)).toEqual(["a", "b", "c", ""]);
expect(regex.splitn("a,b,c", 5)).toEqual(["a", "b", "c"]);

expect(regex.splitn("abc", 0)).toEqual([]);
expect(regex.splitn("abc", 1)).toEqual(["abc"]);

// This result includes an unexpected extra item
expect(regex.splitn("abc", 2)).toEqual(["abc", ""]);
expect(regex.splitn("abc", 3)).toEqual(["abc"]);

About

Rust Regex binding for Javascript

Topics

Resources

Stars

31 stars

Watchers

1 watching

Forks

Releases

Used by

Contributors

Languages