{"id":13812572,"url":"https://github.com/2fd/rregex","last_synced_at":"2025-04-09T12:04:02.361Z","repository":{"id":37021568,"uuid":"434048895","full_name":"2fd/rregex","owner":"2fd","description":"Rust Regex binding for Javascript","archived":false,"fork":false,"pushed_at":"2025-03-24T20:28:39.000Z","size":4492,"stargazers_count":30,"open_issues_count":0,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-02T11:07:51.640Z","etag":null,"topics":["regex","rust","typescript"],"latest_commit_sha":null,"homepage":"https://rregex.dev","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/2fd.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-12-02T01:58:15.000Z","updated_at":"2025-03-24T20:28:42.000Z","dependencies_parsed_at":"2024-01-02T21:46:45.683Z","dependency_job_id":"f650e187-c9a9-4bea-afb8-e1c87e103724","html_url":"https://github.com/2fd/rregex","commit_stats":{"total_commits":160,"total_committers":3,"mean_commits":"53.333333333333336","dds":"0.16874999999999996","last_synced_commit":"1acf82bde79ddcc79ff3ef9210cc2976b20b4d0f"},"previous_names":[],"tags_count":38,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2fd%2Frregex","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2fd%2Frregex/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2fd%2Frregex/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2fd%2Frregex/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/2fd","download_url":"https://codeload.github.com/2fd/rregex/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248036064,"owners_count":21037092,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["regex","rust","typescript"],"created_at":"2024-08-04T04:00:53.388Z","updated_at":"2025-04-09T12:04:02.332Z","avatar_url":"https://github.com/2fd.png","language":"JavaScript","funding_links":[],"categories":["JavaScript regex libraries"],"sub_categories":["Alternative regex builders and engines"],"readme":"# rregex\n\nA dependency-free WebAssembly build of [Rust Regex](https://docs.rs/regex/latest/regex/) for Javascript\n\n![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/2fd/rregex/release.yml?branch=master) ![GitHub Release](https://img.shields.io/github/v/release/2fd/rregex) ![NPM Version](https://img.shields.io/npm/v/rregex)\n[![JSR](https://jsr.io/badges/@rregex/rregex)](https://jsr.io/@rregex/rregex)\n\n- [Why Rust Regex](#why-rust-regex)\n- [Install](#install)\n- [Supported Runtimes](#supported-runtimes)\n- [API](https://tsdocs.dev/docs/rregex/latest)\n  - [`RRegex`](https://tsdocs.dev/docs/rregex/latest/classes/RRegex.html)\n  - [`RRegexSet`](https://tsdocs.dev/docs/rregex/latest/classes/RRegexSet.html)\n  - [`Match`](https://tsdocs.dev/docs/rregex/latest/types/Match.html)\n  - [`Captures`](https://tsdocs.dev/docs/rregex/latest/types/Captures.html)\n  - [`escape`](https://tsdocs.dev/docs/rregex/latest/functions/escape.html)\n- [Benchmarks](#benchmarks)\n- [Known Issues](#known-issues)\n\n## Why Rust Regex\n\nRust has a powerful Regex library with a lot of features that don't exists en the standard `Regex` object\n\n[See the official documentation](https://docs.rs/regex/latest/regex/#syntax) for more detail\n\n## Install\n\n```bash\n  # NPM\n  npm install rregex\n\n  # Yarn\n  yarn add rregex\n\n  # PNPM\n  pnpm add rregex\n\n  # Deno\n  deno add @rregex/rregex\n\n  # JSR\n  npx jsr add @rregex/rregex\n```\n\n## Supported Runtimes\n\nThis package includes builds for multiple runtimes\n\n| Runtime            | Import                                                  | version    |\n| ------------------ | ------------------------------------------------------- | ---------- |\n| Node.js (esm)      | `import { RRegex, RRegexSet } from 'rregex'`            | `*`        |\n| Node.js (commonjs) | `const { RRegex, RRegexSet } = require('rregex')`       | `*`        |\n| Deno               | `import { RRegex, RRegexSet } from '@rregex/rregex'`    | `\u003e=1.10.8` |\n| Bun                | `import { RRegex, RRegexSet } from '@rregex/rregex'`    | `\u003e=1.10.8` |\n| Cloudflare Workers | `import { RRegex, RRegexSet } from 'rregex/lib/cf.mjs'` | `\u003e=1.10.8` |\n| Browser            | TODO                                                    |            |\n| Standalone         | TODO                                                    |            |\n\n## Benchmarks\n\nIn 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**\n\n\u003e Benchmarks are executed using [test/deno.bench.mjs](./test/deno.bench.mjs), and [test/node.bench.mjs](./test/node.bench.mjs)\n\n### Email\n\n| benchmark |     time (avg) |  iter/s |\n| --------- | -------------: | ------: |\n| RegExp    | 342.91 µs/iter | 2,916.2 |\n| RRegex    |   7.27 ms/iter |   137.6 |\n\n\u003e summary: `RegExp` is 21.19x faster than `RRegex`\n\n### IP\n\n| benchmark |    time (avg) |   iter/s |\n| --------- | ------------: | -------: |\n| RegExp    | 72.63 µs/iter | 13,767.7 |\n| RRegex    |  7.02 ms/iter |    142.5 |\n\n\u003e summary: `RegExp` is 96.59x faster than `RRegex`\n\n### URI\n\n| benchmark |     time (avg) |      iter/s |\n| --------- | -------------: | ----------: |\n| RegExp    | 688.79 ns/iter | 1,451,825.0 |\n| RRegex    |  22.52 ms/iter |        44.4 |\n\n\u003e summary: `RegExp` is 32689.42x faster than `RRegex`\n\n| benckmarks                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | benckmarks                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |\n| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| [![Simple IP](./img/rregex-vs-native_-simple-ip.png)](https://jsbenchmark.com/#eyJjYXNlcyI6W3siaWQiOiJlZl9VbGJvYThpRGNYeGM3VUl4YnMiLCJjb2RlIjoiREFUQS5tYXRjaCgnKD86KD86MjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0pXFxcXC4pezN9KD86MjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0pJykiLCJkZXBlbmRlbmNpZXMiOltdLCJuYW1lIjoiUmVnRXhwOiBJUCJ9LHsiaWQiOiI0QkxuZmtPd0p4ZTZhQ0NSVmpIOVUiLCJjb2RlIjoibmV3IHJyZWdleC5SUmVnZXgoXCIoPzooPzoyNVswLTVdfDJbMC00XVswLTldfFswMV0_WzAtOV1bMC05XSlcXFxcLil7M30oPzoyNVswLTVdfDJbMC00XVswLTldfFswMV0_WzAtOV1bMC05XSlcIikuZmluZChEQVRBKSIsImRlcGVuZGVuY2llcyI6W10sIm5hbWUiOiJSUmVnZXg6IElQIn1dLCJjb25maWciOnsibmFtZSI6IlJSZWdleCB2cyBOYXRpdmU6IElQIiwicGFyYWxsZWwiOnRydWUsImdsb2JhbFRlc3RDb25maWciOnsiZGVwZW5kZW5jaWVzIjpbeyJ1cmwiOiJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL3JyZWdleEAxLjEwLjEwL2xpYi93ZWIubWluLmpzIiwibmFtZSI6InJyZWdleCIsImVzbSI6dHJ1ZX1dfSwiZGF0YUNvZGUiOiJjb25zdCB3cmVzID0gYXdhaXQgZmV0Y2goJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vcnJlZ2V4QDEuMTAuMTAvbGliL3JyZWdleC53YXNtJylcbmNvbnN0IHcgPSBhd2FpdCB3cmVzLmFycmF5QnVmZmVyKClcbnJyZWdleC5pbml0U3luYyh3KVxuXG5yZXR1cm4gYFxuIyBodHRwczovL3d3dy5jbG91ZGZsYXJlLmNvbS9pcHMtdjQvI1xuMTczLjI0NS40OC4wLzIwXG4xMDMuMjEuMjQ0LjAvMjJcbjEwMy4yMi4yMDAuMC8yMlxuMTAzLjMxLjQuMC8yMlxuMTQxLjEwMS42NC4wLzE4XG4xMDguMTYyLjE5Mi4wLzE4XG4xOTAuOTMuMjQwLjAvMjBcbjE4OC4xMTQuOTYuMC8yMFxuMTk3LjIzNC4yNDAuMC8yMlxuMTk4LjQxLjEyOC4wLzE3XG4xNjIuMTU4LjAuMC8xNVxuMTA0LjE2LjAuMC8xM1xuMTA0LjI0LjAuMC8xNFxuMTcyLjY0LjAuMC8xM1xuMTMxLjAuNzIuMC8yMlxuYCJ9fQ) | [![IP](./img/rregex-vs-native_-ip.png)](https://jsbenchmark.com/#eyJjYXNlcyI6W3siaWQiOiJlZl9VbGJvYThpRGNYeGM3VUl4YnMiLCJjb2RlIjoiREFUQS5tYXRjaCgnKD86KD86MjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0pXFxcXC4pezN9KD86MjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0pJykiLCJkZXBlbmRlbmNpZXMiOltdLCJuYW1lIjoiUmVnRXhwOiBVUkkifSx7ImlkIjoiNEJMbmZrT3dKeGU2YUNDUlZqSDlVIiwiY29kZSI6Im5ldyBycmVnZXguUlJlZ2V4KFwiKD86KD86MjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0pXFxcXC4pezN9KD86MjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0pXCIpLmZpbmQoREFUQSkiLCJkZXBlbmRlbmNpZXMiOltdLCJuYW1lIjoiUlJlZ2V4OiBVUkkifV0sImNvbmZpZyI6eyJuYW1lIjoiUlJlZ2V4IHZzIE5hdGl2ZTogSVAiLCJwYXJhbGxlbCI6dHJ1ZSwiZ2xvYmFsVGVzdENvbmZpZyI6eyJkZXBlbmRlbmNpZXMiOlt7InVybCI6Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vcnJlZ2V4QDEuMTAuMTAvbGliL3dlYi5taW4uanMiLCJuYW1lIjoicnJlZ2V4IiwiZXNtIjp0cnVlfV19LCJkYXRhQ29kZSI6ImNvbnN0IGRyZXMgPSBhd2FpdCBmZXRjaCgnaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL21hcmlvbWthL3JlZ2V4LWJlbmNobWFyay9tYXN0ZXIvaW5wdXQtdGV4dC50eHQnKVxuY29uc3QgZGF0YSA9IGF3YWl0IGRyZXMudGV4dCgpXG5cbmNvbnN0IHdyZXMgPSBhd2FpdCBmZXRjaCgnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9ycmVnZXhAMS4xMC4xMC9saWIvcnJlZ2V4Lndhc20nKVxuY29uc3QgdyA9IGF3YWl0IHdyZXMuYXJyYXlCdWZmZXIoKVxucnJlZ2V4LmluaXRTeW5jKHcpXG5cbnJldHVybiBkYXRhLnNsaWNlKDAsIE1hdGguZmxvb3IoZGF0YS5sZW5ndGgvNSkpIn19) |\n| [![email](./img/rregex-vs-native_-email.png)](https://jsbenchmark.com/#eyJjYXNlcyI6W3siaWQiOiJlZl9VbGJvYThpRGNYeGM3VUl4YnMiLCJjb2RlIjoiREFUQS5tYXRjaCgnW1xcXFx3ListXStAW1xcXFx3Li1dK1xcXFwuW1xcXFx3Li1dKycpIiwiZGVwZW5kZW5jaWVzIjpbXSwibmFtZSI6IlJlZ0V4cDogZW1haWwifSx7ImlkIjoiNEJMbmZrT3dKeGU2YUNDUlZqSDlVIiwiY29kZSI6Im5ldyBycmVnZXguUlJlZ2V4KFwiW1xcXFx3XFxcXC4rLV0rQFtcXFxcd1xcXFwuLV0rXFxcXC5bXFxcXHdcXFxcLi1dK1wiKS5maW5kKERBVEEpIiwiZGVwZW5kZW5jaWVzIjpbXSwibmFtZSI6IlJSZWdleDogZW1haWwifV0sImNvbmZpZyI6eyJuYW1lIjoiUlJlZ2V4IHZzIE5hdGl2ZTogZW1haWwiLCJwYXJhbGxlbCI6dHJ1ZSwiZ2xvYmFsVGVzdENvbmZpZyI6eyJkZXBlbmRlbmNpZXMiOlt7InVybCI6Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vcnJlZ2V4QDEuMTAuMTAvbGliL3dlYi5taW4uanMiLCJuYW1lIjoicnJlZ2V4IiwiZXNtIjp0cnVlfV19LCJkYXRhQ29kZSI6ImNvbnN0IGRyZXMgPSBhd2FpdCBmZXRjaCgnaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL21hcmlvbWthL3JlZ2V4LWJlbmNobWFyay9tYXN0ZXIvaW5wdXQtdGV4dC50eHQnKVxuY29uc3QgZGF0YSA9IGF3YWl0IGRyZXMudGV4dCgpXG5cbmNvbnN0IHdyZXMgPSBhd2FpdCBmZXRjaCgnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9ycmVnZXhAMS4xMC4xMC9saWIvcnJlZ2V4Lndhc20nKVxuY29uc3QgdyA9IGF3YWl0IHdyZXMuYXJyYXlCdWZmZXIoKVxucnJlZ2V4LmluaXRTeW5jKHcpXG5cbnJldHVybiBkYXRhLnNsaWNlKDAsIE1hdGguZmxvb3IoZGF0YS5sZW5ndGgvNSkpIn19)                                                                                                                                                                                                                                                                       | [![URI](./img/rregex-vs-native_-uri.png)](https://jsbenchmark.com/#eyJjYXNlcyI6W3siaWQiOiJlZl9VbGJvYThpRGNYeGM3VUl4YnMiLCJjb2RlIjoiREFUQS5tYXRjaCgnW1xcXFx3XSs6XFxcXC9cXFxcL1teXFxcXC9cXFxccz8jXStbXlxcXFxzPyNdKyg_OlxcXFw_W15cXFxccyNdKik_KD86I1teXFxcXHNdKik_JykiLCJkZXBlbmRlbmNpZXMiOltdLCJuYW1lIjoiUmVnRXhwOiBVUkkifSx7ImlkIjoiNEJMbmZrT3dKeGU2YUNDUlZqSDlVIiwiY29kZSI6Im5ldyBycmVnZXguUlJlZ2V4KFwiW1xcXFx3XSs6Ly9bXi9cXFxccz8jXStbXlxcXFxzPyNdKyg_OlxcXFw_W15cXFxccyNdKik_KD86I1teXFxcXHNdKik_XCIpLmZpbmQoREFUQSkiLCJkZXBlbmRlbmNpZXMiOltdLCJuYW1lIjoiUlJlZ2V4OiBVUkkifV0sImNvbmZpZyI6eyJuYW1lIjoiUlJlZ2V4IHZzIE5hdGl2ZTogVVJJIiwicGFyYWxsZWwiOnRydWUsImdsb2JhbFRlc3RDb25maWciOnsiZGVwZW5kZW5jaWVzIjpbeyJ1cmwiOiJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL3JyZWdleEAxLjEwLjEwL2xpYi93ZWIubWluLmpzIiwibmFtZSI6InJyZWdleCIsImVzbSI6dHJ1ZX1dfSwiZGF0YUNvZGUiOiJjb25zdCBkcmVzID0gYXdhaXQgZmV0Y2goJ2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tYXJpb21rYS9yZWdleC1iZW5jaG1hcmsvbWFzdGVyL2lucHV0LXRleHQudHh0JylcbmNvbnN0IGRhdGEgPSBhd2FpdCBkcmVzLnRleHQoKVxuXG5jb25zdCB3cmVzID0gYXdhaXQgZmV0Y2goJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vcnJlZ2V4QDEuMTAuMTAvbGliL3JyZWdleC53YXNtJylcbmNvbnN0IHcgPSBhd2FpdCB3cmVzLmFycmF5QnVmZmVyKClcbnJyZWdleC5pbml0U3luYyh3KVxuXG5yZXR1cm4gZGF0YS5zbGljZSgwLCBNYXRoLmZsb29yKGRhdGEubGVuZ3RoLzUpKSJ9fQ)                                     |\n\n\u003e **Note:** In order to compare with native regex these benchmarks follow the [`mariomka/regex-benchmark`](https://github.com/mariomka/regex-benchmark) structure\n\n## Known Issues\n\nIf 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 \u003e=1.3`**\n\n```ts\nconst regex = new RRegex(\",\");\nexpect(regex.splitn(\"a,b,c\", 0)).toEqual([]);\nexpect(regex.splitn(\"a,b,c\", 1)).toEqual([\"a,b,c\"]);\nexpect(regex.splitn(\"a,b,c\", 2)).toEqual([\"a\", \"b,c\"]);\nexpect(regex.splitn(\"a,b,c\", 3)).toEqual([\"a\", \"b\", \"c\"]);\n\n// This result includes an unexpected extra item\nexpect(regex.splitn(\"a,b,c\", 4)).toEqual([\"a\", \"b\", \"c\", \"\"]);\nexpect(regex.splitn(\"a,b,c\", 5)).toEqual([\"a\", \"b\", \"c\"]);\n\nexpect(regex.splitn(\"abc\", 0)).toEqual([]);\nexpect(regex.splitn(\"abc\", 1)).toEqual([\"abc\"]);\n\n// This result includes an unexpected extra item\nexpect(regex.splitn(\"abc\", 2)).toEqual([\"abc\", \"\"]);\nexpect(regex.splitn(\"abc\", 3)).toEqual([\"abc\"]);\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F2fd%2Frregex","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F2fd%2Frregex","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F2fd%2Frregex/lists"}