A dependency-free WebAssembly build of Rust Regex for Javascript
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
# NPM
npm install rregex
# Yarn
yarn add rregex
# PNPM
pnpm add rregex
# Deno
deno add @rregex/rregex
# JSR
npx jsr add @rregex/rregexThis 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 |
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
| benchmark | time (avg) | iter/s |
|---|---|---|
| RegExp | 254.8 µs/iter | 3,925.0 |
| RRegex | 1.7 ms/iter | 589.9 |
summary:
RegExpis 6.65x faster thanRRegex
| benchmark | time (avg) | iter/s |
|---|---|---|
| RegExp | 39.1 µs/iter | 25,600.0 |
| RRegex | 1.4 ms/iter | 698.1 |
summary:
RegExpis 36.67x faster thanRRegex
| benchmark | time (avg) | iter/s |
|---|---|---|
| RegExp | 422.7 ns/iter | 2,366,000.0 |
| RRegex | 1.5 ms/iter | 652.6 |
summary:
RegExpis 3625x faster thanRRegex
| benckmarks | benckmarks |
|---|---|
![]() | ![]() |
![]() | ![]() |
Note: In order to compare with native regex these benchmarks follow the
mariomka/regex-benchmarkstructure
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"]);


