Skip to main content


A dependency-free WebAssembly build of Rust Regex for Javascript

Works with
This package works with Bun
This package works with Cloudflare Workers
This package works with Node.js
This package works with Deno
It is unknown whether this package works with Browsers
JSR Score
3 weeks ago
deno add @rregex/rregex
import * as mod from "@rregex/rregex";
npx jsr add @rregex/rregex
import * as mod from "@rregex/rregex";
yarn dlx jsr add @rregex/rregex
import * as mod from "@rregex/rregex";
pnpm dlx jsr add @rregex/rregex
import * as mod from "@rregex/rregex";
bunx jsr add @rregex/rregex
import * as mod from "@rregex/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


  # 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


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

Simple IP




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"]);
Built and signed on
GitHub Actions
View transparency log