那段没人敢动的正则,AI花了40秒讲明白
一、接手老代码时,最怕看见一行200字的正则
独立开发者和小团队大概都经历过这样的场景:接手一个老项目,翻到某个校验逻辑,屏幕上赫然躺着一行一百多字符的正则表达式,没有注释,没有文档,写它的人三年前就离职了。
你面对它,通常只有三条路:
- 硬读。 对着 MDN 和正则测试网站逐段拆解,运气不好遇到零宽断言、命名分组、贪婪与懒惰匹配混用,一两个小时就这么没了。
- 绕开。 不动它,能跑就行。但需求一来要改匹配规则,你就得回来还债,而且利息更高。
- 重写。 风险最大——你都不确定原正则匹配了哪些边界情况,重写等于盲改。
我们团队之前处理一个用户输入校验模块,里面一段校验手机号、邮箱、身份证混合输入的正则接近200字符。为了确认它的边界行为,我手动构造了二十多个测试用例逐个验证,前后花了将近两个小时,还不确定有没有漏。后来同类的事情又发生了几次,每次都是两小时级别的消耗。粗算下来,一年光“读懂别人的正则”这一项,团队就烧掉了好几个工作日。
问题的本质是:正则是一种写起来高效、读起来极其昂贵的语言。 写的人往往当场理解,读的人却要付出成倍的时间。而AI恰好擅长把这个“解读成本”压下来。
二、AI能帮你做的四件事
把这个场景交给大模型(Claude、GPT-4o、DeepSeek等主流模型都能胜任),它能稳定完成四件事:
- 逐段拆解结构。 把正则按分组、量词、断言切开,每一段用自然语言解释“它在匹配什么、不匹配什么”。
- 指出可疑写法。 比如灾难性回溯风险、无捕获必要的分组、字符类里的冗余转义——这些是人眼容易扫过去的地方。
- 生成正反示例。 一组应该匹配的字符串、一组不应该匹配的字符串,直接可以粘进单元测试。
- 给出等价改写。 用更可读的写法(如命名分组、
x模式加注释、或干脆拆成多段代码)重写,行为保持一致。
三、我的实际使用流程
第一步,把正则和上下文一起喂给模型。 只贴正则本身效果一般,加上它所在的语言(JavaScript/Python/Java 正则方言有差异)、用途描述、以及你已知的一个匹配样例,解释质量会明显提升。
第二步,要求结构化输出。 我固定要求模型按“整体功能 → 逐段拆解 → 正例5个 → 反例5个 → 风险点 → 可选改写”的格式回答,方便直接归档到项目文档里。
第三步,用生成的示例反验证。 模型生成的正反示例,我会立刻丢进正则测试工具或单元测试跑一遍。这一步不能省——AI偶尔也会自信地说错,测试是最后一道闸门。
第四步,把解释固化成注释。 拆解结果直接写回代码注释或文档,一次解读,全组受益。
用这套流程,前面提到的那段200字符正则,从粘贴进去到拿到完整拆解、12个测试用例和一份带注释的改写版本,用时约3分钟(含我在测试工具里验证)。对比之前手工拆解的约2小时,单次节省超过90%的时间。按团队一年遇到20次类似场景估算,大约能省下30多个小时——折合近一个工作周。
四、前后对比,把账算清楚
| 环节 | 用AI之前 | 用AI之后 |
|---|---|---|
| 拆解一段100~200字符正则 | 60~120分钟,且不确定理解正确 | 1~2分钟出结构化解释 |
| 构造边界测试用例 | 手动想20分钟,覆盖不全 | 模型批量生成正反例,秒级 |
| 评估重写风险 | 靠猜,常漏边界 | 有示例集兜底,改完跑一遍即验证 |
| 知识沉淀 | 散在个人脑子里 | 解释直接进代码注释和文档 |
| 单次成本 | 约2小时人力 | 一次模型调用(具体费用以官网价格页为准,通常按token计,一次几毛到几元不等) |
人力成本是显性的,还有一块隐性收益:敢改老代码了。 以前绕着走的正则,现在有了测试用例护城河,重构的决策成本大幅下降。
五、可复制的提示词模板
把下面这段存成代码片段,遇到看不懂的正则直接替换占位符即可:
你是一位资深正则表达式专家。请解析下面这段正则,并按以下格式输出:
【语言/方言】{填写:如 JavaScript / Python / Java}
【正则原文】{粘贴正则,或描述正则所在代码片段}
【已知用途】{填写:如校验用户输入的手机号}
【已知样例】{填写:一个确定能匹配的字符串,可选}
输出格式要求:
1. 整体功能:用一两句话概括它匹配什么;
2. 逐段拆解:把正则切分成逻辑片段,逐段解释含义,标注分组编号与命名分组;
3. 正例:给出5个应该匹配成功的字符串,并说明各自命中了哪部分规则;
4. 反例:给出5个应该匹配失败的字符串,并说明为什么失败;
5. 风险点:指出潜在问题,如灾难性回溯、贪婪匹配歧义、方言兼容性、可读性问题;
6. 可选改写:给出一个等价但更可读的版本(可用命名分组或拆成多段代码),并说明改动理由。
注意:只基于给定信息分析,不确定的地方明确标注“待确认”,不要臆测。两个使用小技巧:一是反例部分特别有价值,人手动想反例最容易偷懒,而边界bug恰恰藏在反例里;二是“待确认”这个约束能有效减少模型一本正经地胡说。
六、几点提醒
- 方言差异要写清楚。 JS的具名分组和Python的写法不同, lookahead的支持程度也不同,不说清楚模型会默认选一个。
- AI的解析结果要过测试。 生成的示例跑一遍成本极低,但能拦住绝大多数错误解释。
- 敏感数据先脱敏。 正则里有时内嵌了业务前缀或内部编号规则,贴给模型前先处理。
写在最后
正则只是切入点,同一套“AI拆解 + 生成示例 + 测试验证”的流程,完全可以复用到复杂SQL、遗留配置文件、第三方API的报文格式上。这类“读懂成本高、写对一次就能复用”的活,正是当下AI最划算的应用场景之一。
如果你还没接入AI能力,或者想在多个模型之间自由切换来处理这类任务,可以试试 Thistoken 的统一接入服务——一次配置,多模型可用:https://api.thistoken.ai/register
---
想直接跑通示例?访问 https://api.thistoken.ai/register 注册 ThisToken.AI,获取 API Key 后即可开始。