{"_id":"@ericcornelissen/lregexp","_rev":"4624688","name":"@ericcornelissen/lregexp","description":"Transparent linear-time (non-backtracking) regular expressions for libraries","dist-tags":{"latest":"1.0.8"},"maintainers":[{"name":"ericcornelissen","email":""}],"time":{"modified":"2026-04-10T18:36:33.000Z","created":"2025-08-18T20:04:39.291Z","1.0.8":"2026-03-04T15:47:35.820Z","1.0.7":"2026-01-18T21:01:34.907Z","1.0.6":"2026-01-06T08:52:35.795Z","1.0.5":"2025-12-26T16:45:48.464Z","1.0.4":"2025-12-26T13:17:25.021Z","1.0.3":"2025-12-25T16:41:59.590Z","1.0.2":"2025-08-21T21:42:35.635Z","1.0.1":"2025-08-18T20:04:39.291Z"},"users":{},"author":{"name":"Eric Cornelissen","email":"ericornelissen@gmail.com","url":"https://ericcornelissen.dev/"},"repository":{"type":"git","url":"git+https://github.com/ericcornelissen/lregexp.git"},"versions":{"1.0.8":{"name":"@ericcornelissen/lregexp","description":"Transparent linear-time (non-backtracking) regular expressions for libraries","version":"1.0.8","license":"MIT","type":"module","exports":{".":{"types":"./index.d.ts","import":"./index.js","require":"./index.cjs"}},"bugs":{"url":"https://github.com/ericcornelissen/lregexp/issues"},"repository":{"type":"git","url":"git+https://github.com/ericcornelissen/lregexp.git"},"engines":{"bun":"^1.2.0","deno":"^2.0.0","node":"^12.20.0 || ^14.13.0 || ^15 || ^16 || ^17 || ^18 || ^19 || ^20 || ^21 || ^22 || ^23 || ^24 || ^25"},"author":{"name":"Eric Cornelissen","email":"ericornelissen@gmail.com","url":"https://ericcornelissen.dev/"},"keywords":["regexp","regex","linear","flag"],"dependencies":{"is-supported-regexp-flag":"^2.0.0"},"devDependencies":{"tinybench":"6.0.0"},"gitHead":"411fc254868ed5e90ffa59281c9e437c8300b5e6","types":"./index.d.ts","_id":"@ericcornelissen/lregexp@1.0.8","homepage":"https://github.com/ericcornelissen/lregexp#readme","_nodeVersion":"24.12.0","_npmVersion":"11.6.2","dist":{"shasum":"fcdc7635138bd8d74f057b4aadd9c1cec070c4ab","size":3505,"noattachment":false,"key":"/@ericcornelissen/lregexp/-/@ericcornelissen/lregexp-1.0.8.tgz","tarball":"http://registry.cnpm.dingdandao.com/@ericcornelissen/lregexp/download/@ericcornelissen/lregexp-1.0.8.tgz"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cc8cd8af-d8c9-4f45-ad44-c75d17324876"}},"directories":{},"maintainers":[{"name":"ericcornelissen","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/lregexp_1.0.8_1772639255666_0.8430554168859641"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-03-04T15:47:35.820Z","publish_time":1772639255820,"_source_registry_name":"default","_cnpm_publish_time":1772639255820},"1.0.7":{"name":"@ericcornelissen/lregexp","description":"Transparent linear-time (non-backtracking) regular expressions for libraries","version":"1.0.7","license":"MIT","type":"module","exports":{".":{"types":"./index.d.ts","import":"./index.js","require":"./index.cjs"}},"bugs":{"url":"https://github.com/ericcornelissen/lregexp/issues"},"repository":{"type":"git","url":"git+https://github.com/ericcornelissen/lregexp.git"},"engines":{"node":"^12.20.0 || ^14.13.0 || ^15 || ^16 || ^17 || ^18 || ^19 || ^20 || ^21 || ^22 || ^23 || ^24 || ^25"},"author":{"name":"Eric Cornelissen","email":"ericornelissen@gmail.com","url":"https://ericcornelissen.dev/"},"keywords":["regexp","regex","linear","flag"],"dependencies":{"is-supported-regexp-flag":"^2.0.0"},"devDependencies":{"tinybench":"6.0.0"},"gitHead":"c2a3c5dc84e8d01de5328c893f4119fc4c6e61d8","types":"./index.d.ts","_id":"@ericcornelissen/lregexp@1.0.7","homepage":"https://github.com/ericcornelissen/lregexp#readme","_nodeVersion":"24.12.0","_npmVersion":"11.6.2","dist":{"shasum":"0105aaaa7dcc18e3ed905645da3674e8eb12a9c0","size":3387,"noattachment":false,"key":"/@ericcornelissen/lregexp/-/@ericcornelissen/lregexp-1.0.7.tgz","tarball":"http://registry.cnpm.dingdandao.com/@ericcornelissen/lregexp/download/@ericcornelissen/lregexp-1.0.7.tgz"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cc8cd8af-d8c9-4f45-ad44-c75d17324876"}},"directories":{},"maintainers":[{"name":"ericcornelissen","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/lregexp_1.0.7_1768770094766_0.0977040378491354"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-01-18T21:01:34.907Z","publish_time":1768770094907,"_source_registry_name":"default","_cnpm_publish_time":1768770094907},"1.0.6":{"name":"@ericcornelissen/lregexp","description":"Transparent linear-time (non-backtracking) regular expressions for libraries","version":"1.0.6","license":"MIT","type":"module","exports":{".":{"types":"./index.d.ts","import":"./index.js","require":"./index.cjs"}},"bugs":{"url":"https://github.com/ericcornelissen/lregexp/issues"},"repository":{"type":"git","url":"git+https://github.com/ericcornelissen/lregexp.git"},"engines":{"node":"^12.20.0 || ^14.13.0 || ^15 || ^16 || ^17 || ^18 || ^19 || ^20 || ^21 || ^22 || ^23 || ^24 || ^25"},"author":{"name":"Eric Cornelissen","email":"ericornelissen@gmail.com","url":"https://ericcornelissen.dev/"},"keywords":["regexp","regex","linear","flag"],"dependencies":{"is-supported-regexp-flag":"^2.0.0"},"devDependencies":{"tinybench":"6.0.0"},"gitHead":"151e23655cbc9bb51d08efc54c167847a3821b3f","types":"./index.d.ts","_id":"@ericcornelissen/lregexp@1.0.6","homepage":"https://github.com/ericcornelissen/lregexp#readme","_nodeVersion":"24.12.0","_npmVersion":"11.6.2","dist":{"shasum":"b69fce81ded7275cdc48ed7559cd21723df8edbc","size":3028,"noattachment":false,"key":"/@ericcornelissen/lregexp/-/@ericcornelissen/lregexp-1.0.6.tgz","tarball":"http://registry.cnpm.dingdandao.com/@ericcornelissen/lregexp/download/@ericcornelissen/lregexp-1.0.6.tgz"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cc8cd8af-d8c9-4f45-ad44-c75d17324876"}},"directories":{},"maintainers":[{"name":"ericcornelissen","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/lregexp_1.0.6_1767689555640_0.33872116652042883"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-01-06T08:52:35.795Z","publish_time":1767689555795,"_source_registry_name":"default","_cnpm_publish_time":1767689555795},"1.0.5":{"name":"@ericcornelissen/lregexp","description":"Transparently create linear-time regular expressions","version":"1.0.5","license":"MIT","type":"module","exports":{".":{"types":"./index.d.ts","import":"./index.js","require":"./index.cjs"}},"bugs":{"url":"https://github.com/ericcornelissen/lregexp/issues"},"repository":{"type":"git","url":"git+https://github.com/ericcornelissen/lregexp.git"},"engines":{"node":"^12.20.0 || ^14.13.0 || ^15 || ^16 || ^17 || ^18 || ^19 || ^20 || ^21 || ^22 || ^23 || ^24 || ^25"},"author":{"name":"Eric Cornelissen","email":"ericornelissen@gmail.com","url":"https://ericcornelissen.dev/"},"keywords":["regexp","regex","linear","flag"],"dependencies":{"is-supported-regexp-flag":"^2.0.0"},"devDependencies":{"tinybench":"6.0.0"},"gitHead":"fdcf22b509ff0789fa03e719370d47cf5686bb3d","types":"./index.d.ts","_id":"@ericcornelissen/lregexp@1.0.5","homepage":"https://github.com/ericcornelissen/lregexp#readme","_nodeVersion":"24.12.0","_npmVersion":"11.6.2","dist":{"shasum":"ab8dd7c0907ed53f47f17b3564478e68dfdf0348","size":2132,"noattachment":false,"key":"/@ericcornelissen/lregexp/-/@ericcornelissen/lregexp-1.0.5.tgz","tarball":"http://registry.cnpm.dingdandao.com/@ericcornelissen/lregexp/download/@ericcornelissen/lregexp-1.0.5.tgz"},"_npmUser":{"name":"ericcornelissen","email":"ericornelissen@gmail.com"},"directories":{},"maintainers":[{"name":"ericcornelissen","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/lregexp_1.0.5_1766767548268_0.4228920099005564"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2025-12-26T16:45:48.464Z","publish_time":1766767548464,"_source_registry_name":"default","_cnpm_publish_time":1766767548464},"1.0.4":{"name":"@ericcornelissen/lregexp","description":"Transparently create linear-time regular expressions","version":"1.0.4","license":"MIT","type":"module","exports":{".":{"types":"./index.d.ts","import":"./index.js","require":"./index.cjs"}},"bugs":{"url":"https://github.com/ericcornelissen/lregexp/issues"},"repository":{"type":"git","url":"git+https://github.com/ericcornelissen/lregexp.git"},"author":{"name":"Eric Cornelissen","email":"ericornelissen@gmail.com","url":"https://ericcornelissen.dev/"},"keywords":["regexp","regex","linear","flag"],"dependencies":{"is-supported-regexp-flag":"^2.0.0"},"devDependencies":{"tinybench":"6.0.0"},"gitHead":"754e7ea67fcfdb6659f17830085c68bbb1df340e","homepage":"https://github.com/ericcornelissen/lregexp#readme","_id":"@ericcornelissen/lregexp@1.0.4","_nodeVersion":"14.18.0","_npmVersion":"6.14.15","dist":{"shasum":"d0d156f7d37ae7ac479f99a0a1ebc475d0f5f4a8","size":2084,"noattachment":false,"key":"/@ericcornelissen/lregexp/-/@ericcornelissen/lregexp-1.0.4.tgz","tarball":"http://registry.cnpm.dingdandao.com/@ericcornelissen/lregexp/download/@ericcornelissen/lregexp-1.0.4.tgz"},"_npmUser":{"name":"ericcornelissen","email":"ericornelissen@gmail.com"},"directories":{},"maintainers":[{"name":"ericcornelissen","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/lregexp_1.0.4_1766755044857_0.3721972323264995"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2025-12-26T13:17:25.021Z","publish_time":1766755045021,"_source_registry_name":"default","_cnpm_publish_time":1766755045021},"1.0.3":{"name":"@ericcornelissen/lregexp","description":"Transparently create linear-time regular expressions","version":"1.0.3","license":"MIT","type":"module","exports":{".":{"import":"./index.js","require":"./index.cjs"}},"bugs":{"url":"https://github.com/ericcornelissen/lregexp/issues"},"repository":{"type":"git","url":"git+https://github.com/ericcornelissen/lregexp.git"},"author":{"name":"Eric Cornelissen","email":"ericornelissen@gmail.com","url":"https://ericcornelissen.dev/"},"keywords":["regexp","regex","linear","flag"],"dependencies":{"is-supported-regexp-flag":"^2.0.0"},"_id":"@ericcornelissen/lregexp@1.0.3","gitHead":"9637521707deaa6d11ad85596717c607f478dc33","homepage":"https://github.com/ericcornelissen/lregexp#readme","_nodeVersion":"24.0.0","_npmVersion":"11.3.0","dist":{"shasum":"d6e3c280492705ff07eeb2791ef59fdb57c60cf1","size":2007,"noattachment":false,"key":"/@ericcornelissen/lregexp/-/@ericcornelissen/lregexp-1.0.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/@ericcornelissen/lregexp/download/@ericcornelissen/lregexp-1.0.3.tgz"},"_npmUser":{"name":"ericcornelissen","email":"ericornelissen@gmail.com"},"directories":{},"maintainers":[{"name":"ericcornelissen","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/lregexp_1.0.3_1766680919432_0.48205492071046896"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2025-12-25T16:41:59.590Z","publish_time":1766680919590,"_source_registry_name":"default","_cnpm_publish_time":1766680919590},"1.0.2":{"name":"@ericcornelissen/lregexp","description":"Transparently create linear-time regular expressions","version":"1.0.2","license":"MIT","type":"module","exports":"./index.js","bugs":{"url":"https://github.com/ericcornelissen/lregexp/issues"},"repository":{"type":"git","url":"git+https://github.com/ericcornelissen/lregexp.git"},"author":{"name":"Eric Cornelissen","email":"ericornelissen@gmail.com","url":"https://ericcornelissen.dev/"},"keywords":["regexp","regex","linear","flag"],"dependencies":{"is-supported-regexp-flag":"^2.0.0"},"_id":"@ericcornelissen/lregexp@1.0.2","gitHead":"d0110c22410f61bfb73463889132a752cbf109c3","homepage":"https://github.com/ericcornelissen/lregexp#readme","_nodeVersion":"22.15.0","_npmVersion":"10.9.2","dist":{"shasum":"fae1ddbb9bfaaaf36d56318430f84b30518384fc","size":1631,"noattachment":false,"key":"/@ericcornelissen/lregexp/-/@ericcornelissen/lregexp-1.0.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/@ericcornelissen/lregexp/download/@ericcornelissen/lregexp-1.0.2.tgz"},"_npmUser":{"name":"ericcornelissen","email":"ericornelissen@gmail.com"},"directories":{},"maintainers":[{"name":"ericcornelissen","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/lregexp_1.0.2_1755812555448_0.08616043233272741"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2025-08-21T21:42:35.635Z","publish_time":1755812555635,"_source_registry_name":"default","_cnpm_publish_time":1755812555635},"1.0.1":{"name":"@ericcornelissen/lregexp","description":"Transparently create linear-time regular expressions","version":"1.0.1","license":"MIT","type":"module","exports":"./index.js","bugs":{"url":"https://github.com/ericcornelissen/lregexp/issues"},"repository":{"type":"git","url":"git+https://github.com/ericcornelissen/depreman.git"},"author":{"name":"Eric Cornelissen","email":"ericornelissen@gmail.com","url":"https://ericcornelissen.dev/"},"keywords":["regexp","regex","linear","flag"],"dependencies":{"is-supported-regexp-flag":"^2.0.0"},"_id":"@ericcornelissen/lregexp@1.0.1","gitHead":"1e3d5a3d73755425a9fc55e4fdcbdd4d8a97b0bc","homepage":"https://github.com/ericcornelissen/depreman#readme","_nodeVersion":"22.15.0","_npmVersion":"10.9.2","dist":{"shasum":"99ad9bc07cfb1d179871aa4ace8a9764852143c2","size":1635,"noattachment":false,"key":"/@ericcornelissen/lregexp/-/@ericcornelissen/lregexp-1.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/@ericcornelissen/lregexp/download/@ericcornelissen/lregexp-1.0.1.tgz"},"_npmUser":{"name":"ericcornelissen","email":"ericornelissen@gmail.com"},"directories":{},"maintainers":[{"name":"ericcornelissen","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/lregexp_1.0.1_1755547479101_0.34884966191925293"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2025-08-18T20:04:39.291Z","publish_time":1755547479291,"_source_registry_name":"default","_cnpm_publish_time":1755547479291}},"readme":"<!-- SPDX-License-Identifier: CC0-1.0 -->\n\n# lRegExp\n\nTransparent linear-time ([non-backtracking]) regular expressions for libraries.\n\n[non-backtracking]: https://v8.dev/blog/non-backtracking-regexp\n\n## Usage\n\nThis library exports a drop-in replacement for the built-in RegExp ([caveats]\napply).\n\n1. Install\n\n   ```shell\n   npm install @ericcornelissen/lregexp\n   ```\n\n2. Import\n\n   ```javascript\n   import RegExp from \"@ericcornelissen/lregexp\";\n   ```\n\n3. Use\n\n   ```javascript\n   new RegExp(\"[linear]{6}\");\n   ```\n\n[caveats]: #caveats\n\n### Runtimes\n\nThis library is compatible with Node.js, Deno, Bun, and major browsers. It only\ntakes effect in V8-based runtimes (Node.js, Deno, Chromium-based browsers) when\nthe experiment linear-time engine is enabled. Otherwise it falls back to the\ndefault `RegExp` constructor.\n\n## Why\n\nBacktracking regular expressions can take exponential time to evaluate, leading\nto the dreaded _ReDoS_ vulnerability. Linear-time regular expressions avoid this\nby not backtracking.\n\nIn Node.js, linear-time regular expressions can be created using the `l` flag\nprovided the `--enable-experimental-regexp-engine` CLI option is used. This\nmakes it difficult for library authors to tap into. Using this package, a\nlibrary can use the RegExp constructor as usual and benefit from the linear time\nregular expression engine when its users enable it. If they don't, it gracefully\nfalls back to the default constructor.\n\n## Caveats\n\nNot all valid JavaScript regular expressions are supported when using the\n`--enable-experimental-regexp-engine` CLI option. This library won't tell you if\nyour regular expressions are incompatible, unless you run it with that CLI\noption. If a regular expression is incompatible the constructor will throw a\nSyntaxError.\n\nTo support users of this package in writing compatible regular expressions we're\ninterested in:\n\n- an ESLint plugin to lint regular expressions and raise warnings for the use of\n  regex features not supported by the non-backtracing engine; ([#4])\n- a tool (CLI/web) to check a given regular expression for compatibility with\n  the non-backtracing engine. ([#21])\n\n[#4]: https://github.com/ericcornelissen/lregexp/issues/4\n[#21]: https://github.com/ericcornelissen/lregexp/issues/21\n\n## How\n\nIf `--enable-experimental-regexp-engine` is used, the RegExp constructor from\nthis package automatically adds the `l` flag to all regular expressions it\nconstructs. If not, the RegExp constructor behavior is unchanged.\n\n## Example\n\nA classic example of a ReDoS-vulnerable regular expression is `(a*)*b`. Using\nthis with vanilla Node.js on a pathological input string takes some time, test\nit for yourself with (add an `a` and the runtime doubles):\n\n```shell\nnode -e '/(a*)*b/.test(\"aaaaaaaaaaaaaaaaaaaaaaaaac\")'\n```\n\nWhen the non-backtracking regular expression engine is enabled, the expression\nevaluates instantly:\n\n```shell\nnode -e '/(a*)*b/l.test(\"aaaaaaaaaaaaaaaaaaaaaaaaac\")' --enable-experimental-regexp-engine\n```\n","_attachments":{},"homepage":"https://github.com/ericcornelissen/lregexp#readme","bugs":{"url":"https://github.com/ericcornelissen/lregexp/issues"},"license":"MIT"}