Skip to content

Repository files navigation

rregex

A dependency-free WebAssembly build of Rust Regex for Javascript

GitHub Actions Workflow StatusGitHub ReleaseNPM VersionJSR

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

RuntimeImportversion
Node.js (esm)import { RRegex, RRegexSet } from 'rregex'*
Node.js (commonjs)const { RRegex, RRegexSet } = require('rregex')*
Denoimport { RRegex, RRegexSet } from '@rregex/rregex'>=1.10.8
Bunimport { RRegex, RRegexSet } from '@rregex/rregex'>=1.10.8
Cloudflare Workersimport { RRegex, RRegexSet } from 'rregex/lib/cf.mjs'>=1.10.8
BrowserTODO
StandaloneTODO

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

benchmarktime (avg)iter/s
RegExp254.8 µs/iter3,925.0
RRegex1.7 ms/iter589.9

summary: RegExp is 6.65x faster than RRegex

IP

benchmarktime (avg)iter/s
RegExp39.1 µs/iter25,600.0
RRegex1.4 ms/iter698.1

summary: RegExp is 36.67x faster than RRegex

URI

benchmarktime (avg)iter/s
RegExp422.7 ns/iter2,366,000.0
RRegex1.5 ms/iter652.6

summary: RegExp is 3625x faster than RRegex

benckmarksbenckmarks
Simple IPIP
emailURI

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

constregex=newRRegex(",");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 itemexpect(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 itemexpect(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