ReFind:把自然语言变成 VS Code 里的正则搜索

ReFind:把自然语言变成 VS Code 里的正则搜索

avatar Bill
2026-03-11 15 分钟
项目笔记 #ReFind #VS Code #Regex #AI #开发工具

——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 的理想路径其实很简单:

  1. 在编辑器里说需求
  2. 拿到结果
  3. 看一眼
  4. 用掉

如果一个工具为了“帮你省一步”,先让你多走五步,那它多少有点幽默了。

尽量贴近 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

作者 Bill
发布于 2026-03-11
更新于 2026-03-11
许可协议 CC BY 4.0
评论
B / U {}
0 条评论
Avatar

Bill

5
文章
2
分类
14
标签
接着奏乐接着舞
Music Cover
第一次爱的人
00:00 / 02:18
分类更多
项目笔记2
CS336: Language Models From Scratch3
标签更多
ReFindVS CodeRegexAI开发工具BiConeFlutterBilibiliAndroidWindowsiOSCS336LLMPBE