ReFind:把自然语言变成 VS Code 里的正则搜索
——written by gpt-5.4
最近我做了一个叫 ReFind 的 VS Code 扩展。
一句话介绍它:你用人话描述“我想找什么”或者“我想怎么替换”,它帮你生成正则,然后直接塞进 VS Code 的查找 / 替换面板里。
听起来不算惊天动地,但对我这种一到正则就容易进入“嗯……这个括号到底该不该转义来着”的人来说,还挺实用。
很多时候,我并不是不会写正则。好吧,我有时候就是不会写,而且就算会写,也经常懒得写,每次都想先问一下 AI。
真实场景一般长这样:
- 我脑子里其实很清楚自己要匹配什么
- 但一动手就开始想:边界呢?分组呢?量词呢?这个反斜杠要不要双写?
- 然后我就会打开 AI,开始描述需求
- 再复制结果
- 再切回 VS Code
- 再打开查找框
- 再粘贴
流程不复杂,但真的很碎。最烦的不是“不会”,而是被这种小事打断节奏。
所以 ReFind 想做的,其实就是把这堆零碎动作压扁一点。
我为什么想做这个
我平时在 VS Code 里改东西时,经常会遇到这种需求:
- 找出某一类函数调用
- 批量替换某种命名格式
- 只匹配满足特定上下文的文本
- 先试着搜一下,再决定要不要替换
这些事情,本质上都很适合用正则。
问题是:人脑想需求的方式,和正则表达式这种东西的表达方式,根本不是一套语言。
我脑子里想的通常是:
帮我找到所有
snake_case的变量名,但不要匹配常量。
或者:
把
foo(bar)这种调用替换成foo({ value: bar })。
但正则不会因为你说得像人话就自动长出来。你还是得自己把这个意图翻译成一串有点像咒语的东西。
所以我就想,不如干脆让工具来做这层翻译。
ReFind 到底做了什么
目前它主要做两件事。
1. 用自然语言生成“查找”正则
你描述“想找什么”,ReFind 调用语言模型生成正则,然后直接通过 VS Code 自带的能力,把它应用到 Find Widget 里。
这里最关键的不是“能生成正则”——毕竟现在谁都能找 AI 生成。
关键是:生成完马上就能用。
我不需要:
- 去另一个窗口问模型
- 盯着回复复制代码
- 回到编辑器
- 再自己粘进去
这种体验上的差别,说大不大,说小也不小。反正我自己是很烦来回切。
2. 用自然语言生成“查找 + 替换”
除了查找本身,ReFind 也支持你直接描述:
- 要匹配哪一类内容
- 要替换成什么样子
这对那种“改法其实很机械,但正则写起来很容易把自己绕晕”的场景特别有用。
你可以把它理解成:把“我脑子里的修改意图”,尽可能短路径地送到 VS Code 的替换框里。
我为什么没有把它做成“全自动”
虽然这东西用了 AI,但我一点都不想让它变成那种“你按一下按钮,它就神秘地替你改一大片”的玩意。
因为正则这个东西吧,平时看着挺乖,一旦写歪,破坏力是很有节目效果的。
所以 ReFind 的流程是:先生成,再确认,然后再应用。
也就是说,模型给出结果之后,你可以:
- 直接用
- 手动改一改
- 干脆取消
我挺喜欢这种感觉的:不是完全手工,也不是完全放飞,而是让 AI 先干活,但最后那一下你自己拍板。
说白了,我信 AI 能帮我省时间,但我还没有信到让它闭着眼替我全局替换。
为什么要支持“把当前选区当上下文”
这个点我自己还挺喜欢的。
很多查找需求其实不是一句抽象描述就能说清的,尤其是你在处理某段具体代码的时候。你真正想表达的往往是:
- 就照着这段代码的样子帮我写一个匹配
- 在这个上下文附近找某种模式
- 参考我现在选中的内容,理解命名或结构
如果只丢给模型一句很抽象的话,它有时候就会开始自由发挥。
但如果你顺手把当前选中的一小段内容也带上,结果通常会靠谱很多。
当然,这里我也很在意边界:只有你确认要带上选区时,选中的内容才会发给模型。
我不想让这个扩展给人一种“它是不是把我整个文件都偷偷看完了”的感觉。那种体验会很糟,也没必要。
这个项目里我比较在意的几件事
少折腾,少复制粘贴
我对很多 AI 工具最大的怨念就是:它们嘴上说在帮你提效,结果自己先制造了一堆流程。
ReFind 的理想路径其实很简单:
- 在编辑器里说需求
- 拿到结果
- 看一眼
- 用掉
如果一个工具为了“帮你省一步”,先让你多走五步,那它多少有点幽默了。
尽量贴近 VS Code 原生体验
ReFind 没有自己重做一套搜索 UI,而是直接接进 VS Code 原生的查找 / 替换流程。
原因也不复杂:
- 大家本来就已经会用 Find Widget
- 原生能力更稳
- 少造轮子,后面少填坑
我一直觉得,好的编辑器扩展未必要看起来很庞大,但最好要像它本来就应该在那里一样自然。
目前它还有哪些不完美
先说结论:有,而且挺真实。
比如:
- 模型有时候会给出不够漂亮,甚至不太对劲的正则
- 复杂需求通常还是要手动修一修
- 目前主要还是围绕 VS Code 的 JavaScript 风格正则
- 某些替换细节也会受 VS Code 原生能力限制
所以我现在对 ReFind 的定位很明确:它不是一个“神之一键替换系统”,而是一个能很快帮我把第一版正则弄出来的工具。
第一版出来之后,你再决定是直接用、稍微改一下,还是嫌它写得太抽象然后亲自接管。
后面我还想继续加什么
如果继续往下做,我比较想补这些:
- 多轮 refinement,比如“这个不错,但别匹配注释”
- 更直观的 regex 预览和高亮反馈
- 最近生成记录,免得同样的东西反复问
- 支持多文件搜索
- 更灵活的模型配置
本质上,这些方向都在做同一件事:让“我想改什么”到“编辑器真的帮我改起来”之间的距离更短。
最后
我一直觉得,AI 工具最舒服的状态,不是每次都让你惊呼“哇它好聪明”,而是你慢慢开始觉得:
这功能本来就该有吧?
ReFind 现在还挺早期,但它已经是那种我自己会真用、也愿意继续磨的小工具了。
如果你也经常在 VS Code 里跟查找 / 替换、正则表达式斗智斗勇,可以看看这个项目:
也许它不能让你从此爱上正则,但至少能让你少被正则气几次。
ReFind:把自然语言变成 VS Code 里的正则搜索
https://it-bill.github.io/blog/2026/refind-vscode-ai-regex