AI 可以把自然语言快速转换为正则候选,但它不知道你的完整输入边界、目标正则引擎和失败样例。可靠的工作流应该是“描述需求、生成候选、补充样例、验证结果”,而不是生成后直接复制到生产代码。
先把需求写得可验证
“匹配 GitHub 链接”过于宽泛。更好的描述是:
使用 JavaScript 正则匹配完整 URL;协议必须是 https;主机名必须恰好为 github.com;路径必须以 .md 结尾;不允许 query 参数。
在正则表达式测试工具的“AI 辅助生成”区域输入描述,点击“生成正则”。描述会发送到 DevToolbox API 和 Cloudflare Workers AI,生成结果会自动填入上方正则输入框。
AI 可能返回下面这个候选:
^https:\/\/github\.com\/.*\.md$
它看起来合理,但是否符合需求只能通过样例确认。
同时准备应该通过和应该失败的样例
把这些文本放进“测试文本”区域:
https://github.com/openai/openai-node/blob/master/README.md
https://github.com/example/demo.md
http://github.com/example/demo.md
https://evilgithub.com/example/demo.md
https://github.com/example/demo.md?raw=1
前两行应该匹配,后三行应该失败。页面会高亮匹配片段,并列出匹配位置和捕获组。只测试成功样例,很容易漏掉过度匹配。
flags 会改变结果
工具支持 JavaScript 的 g、i、m、s、u 和 y flags:
g查找全部匹配;关闭后只返回第一次匹配。i忽略大小写。m让^和$可以匹配每一行的开头和结尾。s让点号也匹配换行符。u启用 Unicode 模式。y从上一次匹配结束位置继续进行粘连匹配。
对“每一行都是一个完整 URL”的样例,需要启用 g 和 m。复制正则时也要同时记录 flags,仅复制表达式主体可能改变运行结果。
AI 不能替代性能和安全检查
包含多层量词的表达式,例如 (a+)+$,在特定失败输入下可能触发灾难性回溯,造成明显的 CPU 消耗。当前页面负责使用浏览器的 JavaScript 正则引擎执行样例,但不会证明表达式在所有输入长度下都安全。
用于路由、权限判断或输入验证时,还应当:
- 限制待匹配字符串长度。
- 加入空字符串、超长字符串、Unicode 和换行等边界样例。
- 在目标运行时执行单元测试,因为不同语言的正则语法并不完全一致。
- 对安全敏感格式优先使用成熟解析器,而不是不断扩张一条复杂正则。
AI 的价值是减少起草时间;正反样例和目标环境测试才决定这条正则是否可用。