这是一个写得下、看得见的正则工具:输入表达式与测试文本,匹配结果立刻高亮,
并逐条列出匹配文本、起止下标、按顺序排列的捕获组和 (?<名字>…) 定义的命名组。
支持 g(全局)、i(忽略大小写)、m(多行)、s(点匹配换行)、
u(Unicode)、y(粘性)六种标志自由组合,替换文本支持
$1、$&、$<名字> 等引用,替换结果实时预览。
关键的一点是:正则在 Web Worker 里执行,并设有超时。某些正则会发生灾难性回溯——
像 (a+)+$ 这类写法在遇到不匹配的较长文本时,回溯次数随长度指数增长,
同步执行会把整个标签页卡死到只能强制关闭。放进 Worker 后正则跑在独立线程上,主线程继续响应;
一旦超过 1.5 秒没有结果,页面会立即终止该 Worker 并给出提示,你的输入和页面都完好无损。
超时的 Worker 被丢弃,下一次输入会新建一个干净的 Worker 重新执行,不需要刷新页面。
几个容易出错的地方都做了处理:零长度匹配(如 a*)如果不手动推进
lastIndex 就会死循环,工具检测到后自动前进一位,并在高亮区用一条细竖线标出它的位置;
非法表达式会给出浏览器原始的错误说明而不是静默失败;测试文本上限 20 万字符,
匹配结果最多收集 10000 条,超出会明确告诉你已截断,而不是给出一个看起来完整的错误数字。
正则与测试文本都在浏览器本地处理。Worker 用的是页面自己用 Blob 创建的一段内联脚本, 不是远程文件,页面不发出任何携带内容的网络请求,也不记录你输入过的内容。
因为某些正则会发生灾难性回溯:像 (a+)+$ 这类写法在遇到不匹配的较长文本时,回溯次数随长度指数增长,同步执行会把整个标签页卡死到只能强制关闭。放进 Worker 后,正则跑在独立线程上,主线程继续响应;一旦超过 1.5 秒没结果,页面会立刻终止该 Worker 并给出提示,你的输入和页面都完好无损。
能。超时的 Worker 会被立刻终止并丢弃,下一次输入会新建一个干净的 Worker 重新执行,不需要刷新页面。超时只是说明当前这个正则配合这段文本太慢,换个写法(比如把嵌套量词拆开、用更精确的字符类)通常就能解决。
像 a* 这样的正则可以匹配到空字符串,如果不在每次匹配后手动把 lastIndex 往前推一位,exec 会停在原地无限循环。本工具在检测到零长度匹配时会自动推进位置,并在高亮区用一个细竖线标出它的位置,避免出现看不见的匹配。
在「匹配结果」列表里逐条展开:每一条会给出匹配文本、起止下标、按序号排列的捕获组,以及 (?<名字>…) 定义的命名组(按名字给出)。未参与匹配的组显示为空,方便区分「匹配到空字符串」和「这一组没参与匹配」。
有,上限 20 万字符。超过会给出提示并暂停执行,这是为了不让超长文本拖慢整个页面的响应。匹配结果最多收集 10000 条,超出会明确告诉你已截断,而不是给出一个看起来完整的错误数字。
不会。正则与测试文本都在浏览器里处理,正则执行发生在页面自己创建的 Web Worker 中(一段内联脚本,不是远程文件),页面不发出任何携带内容的网络请求,也不记录你输入过的内容。