Skip to main content

Built and signed on GitHub Actions

A dependency-free WebAssembly build of Rust Regex for Javascript

This package works with Cloudflare Workers, Node.js, Deno, BunIt is unknown whether this package works with Browsers
This package works with Cloudflare Workers
This package works with Node.js
This package works with Deno
This package works with Bun
It is unknown whether this package works with Browsers
JSR Score
76%
Published
4 months ago (1.11.0)

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 342.91 µs/iter 2,916.2
RRegex 7.27 ms/iter 137.6

summary: RegExp is 21.19x faster than RRegex

IP

benchmark time (avg) iter/s
RegExp 72.63 µs/iter 13,767.7
RRegex 7.02 ms/iter 142.5

summary: RegExp is 96.59x faster than RRegex

URI

benchmark time (avg) iter/s
RegExp 688.79 ns/iter 1,451,825.0
RRegex 22.52 ms/iter 44.4

summary: RegExp is 32689.42x 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"]);
Built and signed on
GitHub Actions
View transparency log

New Ticket: Report package

Please provide a reason for reporting this package. We will review your report and take appropriate action.

Please review the JSR usage policy before submitting a report.

Add Package

deno add jsr:@rregex/rregex

Import symbol

import * as rregex from "@rregex/rregex";
or

Import directly with a jsr specifier

import * as rregex from "jsr:@rregex/rregex";

Add Package

pnpm i jsr:@rregex/rregex
or (using pnpm 10.8 or older)
pnpm dlx jsr add @rregex/rregex

Import symbol

import * as rregex from "@rregex/rregex";

Add Package

yarn add jsr:@rregex/rregex
or (using Yarn 4.8 or older)
yarn dlx jsr add @rregex/rregex

Import symbol

import * as rregex from "@rregex/rregex";

Add Package

npx jsr add @rregex/rregex

Import symbol

import * as rregex from "@rregex/rregex";

Add Package

bunx jsr add @rregex/rregex

Import symbol

import * as rregex from "@rregex/rregex";