# @ericcornelissen/lregexp 中文文档

规范地址：https://npmcn.com/package/%40ericcornelissen/lregexp/

版本：1\.0\.13
npm 元数据更新时间：2026-06-20T14:51:59.670Z
中文译文更新时间：2026-11-13T20:55:06.650Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40ericcornelissen/lregexp
原文对照：https://npmcn.com/package/%40ericcornelissen/lregexp/?lang=original
项目主页：https://github.com/ericcornelissen/lregexp#readme
源码仓库：https://github.com/ericcornelissen/lregexp

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：12.9 kB，8 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- Node.js 要求：^0\.8\.6 \|\| \>=0\.9\.1 \<27
- 运行依赖：0 个
- 首次发布：2025-08-18T20:04:38.984Z
- 最新版本发布：2026-06-20T14:51:59.300Z
- 近 30 天下载量：10602（2026-10-14 至 2026-11-12，npm 官方下载统计）
- 已发布版本数：14（近 12 个月 11 个）

## 中文简介

用于库的透明线性时间(非回溯跟踪)正则表达式

## 安装

```sh
npm install @ericcornelissen/lregexp
```

也可以使用：`pnpm add @ericcornelissen/lregexp`、`yarn add @ericcornelissen/lregexp`、`bun add @ericcornelissen/lregexp`

## README

# lRegExp 文档

透明线性时间( E)[无后继跟踪](https://v8.dev/blog/non-backtracking-regexp)) 用于图书馆的正则表达式.

## 使用量

此套件会导出内置 RegExp 的倒置替换( )[说明](https://npmcn.com/package/%40ericcornelissen/lregexp/#readme-caveats) (适用).

1.  安装
    
    ```shell
    npm install @ericcornelissen/lregexp
    ```
    
2.  导入
    
    ```javascript
    import RegExp from "@ericcornelissen/lregexp";
    ```
    
3.  使用
    
    ```javascript
    new RegExp("[linear]{6}");
    ```
    

### 运行时间

这个软件包与Node.js,Deno,Bun等主要浏览器兼容. 只有这样 在基于 V8 的运行时间( Node.js, Deno, Chromium 的浏览器)中生效 启用了实验线性时间引擎。 否则就掉回原地 默认 `RegExp` 建筑师.

要启用线性时间正则表达式引擎:

-   **节点.js**: 使用 `node --enable-experimental-regexp-engine entrypoint.js`
-   **德诺**: 使用 `DENO_V8_FLAGS="--enable-experimental-regexp-engine" deno entrypoint.ts`

## 背景情况

### 为什么

后跟踪正则表达式需要指数化时间进行评估,从而引导 以敬畏者发誓 _ReDos 软件_ 脆弱性。 线性时间正则表达式避免此现象 由不回溯跟踪.

在基于 V8 的运行时,线性时正则表达式可以使用 `l` 旗帜提供了 `--enable-experimental-regexp-engine` 使用了 CLI 选项 . 这使得图书馆作者难以利用. 使用此软件包, a 库可以照常使用 RegExp 构建器并从线性时间中受益 用户启用时的正则表达式引擎。 如果他们不这样做, 它优雅地 返回默认构造器.

### 洞穴

并非所有有效的 JavaScript 正则表达式在使用时都被支持 `--enable-experimental-regexp-engine` CLI选项. 这个包裹不会告诉你 您的正则表达式不兼容, 除非你用 CLI 运行它 选项。 如果正则表达式不兼容,则构造器将丢入 [语法错误](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SyntaxError)。 。 。 .

为了支持这个软件包的用户 写作兼容的正则表达式,我们是 有兴趣:

-   一个 ESLint 插件, 用于插入正则表达式并提醒使用 regex 特性不由非后跟踪引擎支持; ([4号](https://github.com/ericcornelissen/lregexp/issues/4)(中文(简体) )
-   用于检查给定正则表达式的工具( CLI/ web) 与 非回转引擎。 ([21号](https://github.com/ericcornelissen/lregexp/issues/21)(中文(简体) )

### 示例

ReDoS- vulnerable正则表达式的一个经典例子是 `(a*)*b`。使用 与香草节点.js 在病理输入字符串上需要相当长的时间, 为你自己测试(添加一个) `a` 和运行时间的加倍:

```shell
node -e '/(a*)*b/.test("aaaaaaaaaaaaaaaaaaaaaaaaac")'
```

当非回溯正则表达式引擎启用时,表达式 即时评估 :

```shell
node -e '/(a*)*b/l.test("aaaaaaaaaaaaaaaaaaaaaaaaac")' --enable-experimental-regexp-engine
```

## 重写

以下是一些关于改写正则表达式的建议: JavaScript的标准引擎到线性时间引擎. 这些建议是: 尚需进行不普遍适用的仔细试验.

-   正视前 (O)`(?=...)`当 _替换_
    
    抓取外观并恢复(使用) `$<n>`在替换时。 对于 示例: `replace(/(a(?=b)/, "A")` 改为 `replace(/a(b)/, "A$1")`。 。 。 .
    
-   负望前 (`(?!...)`当 _替换_
    
    抓取外观前方,倒置相配,再加一串后方主播(`$`, (中文(简体) ), 并恢复(使用 `$<n>`在替换时。 例如: `replace(/(a(?!b)/, "A")` 改为 `replace(/a([^b]|$)/, "A$1")`。 。 。 .
    
-   `i` 旗帜时 _测试_
    
    写入正则表达式以匹配小写字符串并将字符串转换为 小写( 使用 `.toLowerCase()`在匹配它们之前.
    

### 测试

我们建议使用 [差异测试](https://en.wikipedia.org/wiki/Differential_testing) 使用 [快速检查](https://fast-check.dev/) 重写时 常规表达式。 您可以使用以下测试示例作为模板:

```javascript
// Run as: node --test --enable-experimental-regexp-engine rewrite_test.js

import { test } from "node:test";

import lRegExp from "@ericcornelissen/lregexp";
import * as fc from "fast-check";

test("rewritten regular expression", () => {
  const original = /old regular expression/;
  const rewritten = new lRegExp(/new regular expression/);

  fc.assert(
    fc.property(
      fc.oneof(
        // any old string, unlikely to match
        fc.string(), 

        // strings that should match (limited support)
        fc.stringMatching(original), 
      ),
      (s) => original.test(s) === rewritten.test(s)
    ),
  );
});

test("--enable-experimental-regexp-engine", () => {
  /ensures that the linear engine is enabled/l;
});
```

## 许可证

源代码根据麻省理工学院的许可,参见 [自由主义](https://npmcn.com/package/%40ericcornelissen/lregexp/LICENSE) 全文 许可证文本。 文件文本根据 CC0-1.0 许可; 代码片段 根据MIT -0许可证.

## 常见问题

### @ericcornelissen/lregexp 是什么？

用于库的透明线性时间\(非回溯跟踪\)正则表达式

### 如何安装 @ericcornelissen/lregexp？

在项目目录运行 npm install @ericcornelissen/lregexp，或使用 pnpm add / yarn add / bun add。

### @ericcornelissen/lregexp 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @ericcornelissen/lregexp 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @ericcornelissen/lregexp 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js ^0\.8\.6 \|\| \>=0\.9\.1 \<27。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @ericcornelissen/lregexp 可以商用吗？

@ericcornelissen/lregexp 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @ericcornelissen/lregexp 的下载量有多少？

根据 npm 官方下载统计，@ericcornelissen/lregexp 在 2026/10/14 – 2026/11/12 这 30 天内被下载 10,602 次，日均约 353 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @ericcornelissen/lregexp 还在维护吗？

最新版本 1\.0\.13 发布于 2026/06/20（4 个月前）；至今共发布 14 个版本，其中过去 12 个月发布了 11 个；首次发布于 2025/08/19。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

