跳到正文

omdsh-dev/dsh-tool-regex

30最近提交 2026年8月14日

dsh-tool-regex DSH 插件

该插件提供四个确定性正则动作:test(测试匹配)、find(提取全部匹配)、replace(安全替换)和 explain(静态解释正则含义)。它在 worker 线程中执行,带有 1 秒超时以防止灾难性回溯。所有操作纯函数,零依赖。

如何安装 dsh-tool-regex DSH 插件

dsh plugin --profile web add github:omdsh-dev/dsh-tool-regex

复制不会执行命令。安装 dsh-tool-regex DSH 插件前请核对仓库和版本。

dsh-tool-regex DSH 插件数据来源

dsh-tool-regex DSH 插件快照日期:2026年8月16日

discovered

dsh-tool-regex DSH 插件能做什么

  • test 动作:检查模式是否匹配输入(完整匹配语义由模型通过 ^...$ 表达)。
  • find 动作:提取所有匹配,包含索引、完整匹配、编号捕获组和命名组(自动补 g 标志)。
  • replace 动作:全局安全替换,支持 $1/$2/$<name>/$<unicode>,使用字符串替换路径(无 eval)。
  • explain 动作:静态解析模式为人类可读的节点序列,不执行匹配。
  • ReDoS 防护:worker 硬超时(1000ms)、输入大小限制(64KB)、模式/替换文本限制(16KB)、输出限制(1MB)。

dsh-tool-regex DSH 插件适合哪些场景

  • 验证用户提供的正则表达式是否正确。
  • 从日志或文本中提取字段,使用命名捕获组。
  • 在 AI 生成的内容中进行安全文本替换,无需执行代码。
  • 通过 explain 动作理解复杂正则模式,用于调试。
  • 在沙盒环境中进行正则测试,无需启动子进程(bash/node/python)。

dsh-tool-regex DSH 插件适合谁

  • 使用 DSH 为模型添加确定性正则能力的 AI 开发者。
  • 需要在沙盒环境中静态验证和解释正则表达式的开发者。

dsh-tool-regex DSH 插件的限制

  • 仅支持 JavaScript 正则语法(不含外围斜杠)。
  • 输入文本限制 64KB,模式限制 16KB,替换文本限制 16KB;输出超过 1MB 被拒绝。
  • find 动作结果上限 1000 条,防止输出膨胀。
  • explain 动作对超过 4096 个节点的模式返回错误。
  • 不适用于不可信的大输入与嵌套量词模式(如 (a+)+ 或 (.*)*),README 中明确警告。

dsh-tool-regex DSH 插件的仓库 README 摘录

以下文字摘自 dsh-tool-regex DSH 插件的上游仓库 omdsh-dev/dsh-tool-regex 的 README,版权归原作者,仅作引用。

DSH 正则工具插件 —— 测试匹配、提取捕获组、安全替换、**静态解释正则含义(不执行任何代码)**。零依赖、纯函数。 [![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) ## 动机 模型经常需要验证用户给的 pattern、从日志/文本中提取字段、做文本替换。"心算"正则结果错误率极高,且无法给用户展示可验证的过程。现有替代是起 `bash` 进程跑 `node -e` 或 python——进程开销 + 模型现写脚本的正确性风险。内置 `grep` 只能做**文件域**搜索,无法对任意文本测试/提取/替换/解释。 本插件提供确定性正则工具,其中 `explain` 是差异化能力:静态解析 pattern 结构并给出人读解释,**不执行匹配**,天然免疫 ReDoS。 ## 安全模型(ReDoS 多层防线) JS 正则的灾难性回溯是真实威胁(如 `(a+)+$` 配合超长输入)。防线: 1. **worker 硬超时**:test/find/replace 在**可终止的 worker 线程**内同步执行,1,000ms 预算到期 `worker.terminate()` 并返回 `regex: execution timed out`——灾难性回溯不再能阻塞宿主进程(工具管道的 `timeoutMs` 对同步阻塞体是协作式,仅靠它不够;worker 内会再次执行全部上限校验) 2. **输入长度上限**:64,000 字节(UTF-8)——超限在入口直接拒绝,不进入回溯 3. **资源上限**:pattern ≤ 16KB、replacement ≤ 16KB、输出 ≤ 1MB、匹配数 ≤ 1,000(limit 钳制) 4. **explain 零执行**:只做静态 tokenizer,不构造 `RegExp` 实例,任何 pattern 都即时返回 > ⚠️ 工具描述与 README 均明确警告模型:**不要对不可信的大输入使用无锚点的嵌套量词 pattern**(如 `(a+)+`、`(.*)*`)。 其余边界:无效 pattern 捕获 `SyntaxError` 报错(含位置信息);无效/重复 flag 逐字符校验;`replace` 使用 `String.replace` **字符串替换路径**(JS 原生 `$`-语义,无 `new Function`、无 eval)。 ## 工具声明 注册 `regex` 工具(`@deepseek-ai/dsh-tool-regex`,row id `tool-regex`),统一输出 JSON 文本字符串。 | 参数 | 类型 | 必填 | 说明 | |---|---|---|---|

阅读完整 README仓库许可: MIT

dsh-tool-regex DSH 插件常见问题

如何安装 dsh-tool-regex 插件?

您可以使用 DSH CLI 安装:`dsh plugin --profile web add github:omdsh-dev/dsh-tool-regex`。或者先通过 `npm pack` 生成 tarball,然后用 `dsh plugin --profile web add ./dsh-tool-regex-<version>.tgz` 安装。请注意 web 和 headless 是不同 profile,需要分别安装。

如何测试正则表达式是否匹配字符串?

使用 `test` 动作:提供 `pattern`(不含斜杠)、`input`(待测试文本)和可选的 `flags`。如果匹配返回 `{"matched": true}`,否则返回 `{"matched": false}`。要实现完整字符串匹配,需要在模式前后加上 `^` 和 `$`。

如何提取正则匹配的捕获组?

使用 `find` 动作。返回包含多个对象的数组,每个对象有 `index`、`match`、`captures`(编号捕获组)和 `groups`(命名组)。如果模式没有 `g` 标志,插件会自动添加以返回所有匹配。例如:`regex { action: "find", pattern: "(\\w+)@(\\w+)", input: "a@b x c@d" }` 返回两个匹配及其捕获组。

如何进行安全的正则替换?

使用 `replace` 动作,提供 `pattern`、`input`、`replacement` 和可选的 `flags`。替换字符串支持 `$1`、`$2`、`$<name>`、`$$`(转义为 `$`)等。插件使用 JavaScript 的字符串替换路径,不会执行 `eval`。返回结果包含 `result`(替换后的文本)和 `replaced`(替换次数)。例如:`regex { action: "replace", pattern: "(\\w+) (\\w+)", input: "hello world", replacement: "$2 $1" }` 返回 `{"result":"world hello","replaced":1}`。

如何使用 explain 动作理解正则表达式的含义?

是的。`explain` 动作会静态解析模式并返回人类可读的节点序列,每个节点包含 `kind`、`text` 和 `meaning` 字段。它不执行匹配,因此即使对 ReDoS 易感模式也是安全的。例如:`regex { action: "explain", pattern: "\\d{4}-\\d{2}" }` 返回描述模式的节点列表。