正则替换工具

把一条正则表达式套到文本上,批量把匹配到的内容换成新写法。支持捕获组引用($1、$2)、字面量美元号($$)和 g/i/m/s/u/y 标志,替换结果、匹配次数和每一次命中的起止位置与分组内容都实时列出来,文本只在本地浏览器处理,不会上传到任何服务器。

匹配明细(序号 / 匹配值 / 起始位置 / 分组)
序号匹配值起始位置分组
12026-10-2152026/10/21
22026-11-05332026/11/05
32026-11-08732026/11/08

默认示例把三种「年-月-日」重排为「月/日/年」;改成 g 之外加 i 可忽略大小写,加 m 让 ^ 和 $ 按行生效。

使用方法

正则替换分四步:写下要处理的原文本,给出查找用的正则表达式,选择标志,再写「替换为」的模板。点「执行替换」或改动任意输入框,结果区、匹配次数与明细表会同步刷新;「复制替换结果」把整段替换后的文本带走,「复制匹配明细 TSV」则把下方表格粘进表格软件。

  1. 原文本支持多行,直接粘贴日志、CSV 片段或网页源码都行;中英文混排、emoji 都不会破坏匹配,引擎按 Unicode 码点处理。
  2. 正则表达式是查找规则。示例 (\d{4})-(\d{2})-(\d{2}) 用三组括号各抓「年」「月」「日」四个数字,连字符是字面量。
  3. 标志决定匹配方式:g 替换全部(不加则只动第一处),i 忽略大小写,m 让 ^/$ 每行独立,s 让 . 也能匹配换行,u 按码点解析,y 从固定位置粘连匹配。
  4. 「替换为」里 $1、$2 引用第 1、2 个捕获组,$$ 输出一个字面量 $;本页不对替换串做额外转义,原样交给浏览器引擎。

正则替换工具能解决什么

手工改一处两处还行,同一条规则出现几十次时,肉眼替换既慢又容易漏。正则替换把「查找规则」和「改写模板」分开:规则写一次,命中多少处就统一改多少处,而且每一处都按相同的模板变,不会出现前面改了后面忘了的割裂。

第二类场景是字段重排。像示例里把「年-月-日」翻成「月/日/年」,靠捕获组把三段分别抓出来再按新顺序拼回去,比逐段截取字符串稳得多——日期格式一变,只要调正则,模板不动。

第三类是提取与计数。本页不只给结果文本,还把匹配次数和每次命中的起始位置、分组内容列成表,方便你核对「到底改了哪些地方、改得对不对」,而不是替换完还得肉眼回查。

原理与捕获组

括号在正则里有两个作用:分组和捕获。一对 ( ) 既划定了「年」的范围,又把它存进第 1 个捕获组,替换模板里用 $1 取回。$2、$3 依次对应第 2、3 组。示例把三组反着拼成 $2/$3/$1,日期就被重排了。

美元号的转义。因为 $ 在替换串里是特殊前缀,想在结果里出现一个真正的 $(比如给金额加前缀),要写成 $$。漏写会把它当成组引用而报错或得到空串。$& 表示整段匹配、$` 和 $' 分别表示匹配前、后的文本,高级改写时很有用。

贪婪与惰性。 .* 默认贪婪,会一直吃到最后一个满足条件的位置;在后面加 ? 变成 .*? 惰性,吃到第一个就停。同一段文本、同一条意图,两种写法结果可能天差地别——正文下方对照表举了一个最小例子说明。

组号是怎么排的。捕获组的编号按左括号出现的先后从 1 递增,和它在替换模板里被引用的 $n 一一对应。嵌套括号同样适用:((a)(b)) 里外层是第 1 组、内层两个分别是第 2、3 组。正则替换工具会在匹配明细表里把每组内容单独列出,对照左括号顺序就能确认哪一组该填进哪个 $n,避免日期重排时张冠李戴。当模板里的 $n 编号超过了实际分组数,工具也会在提示区点明,而不是悄悄输出空串。

完整示例

默认文本里有三处「年-月-日」:2026-10-21、2026-11-05、2026-11-08。正则表达式 (\d{4})-(\d{2})-(\d{2}) 三次都命中,标志 g 保证全部替换,替换模板 $2/$3/$1 把每组按「月/日/年」重排,于是得到 10/21/2026、11/05/2026、11/08/2026。匹配明细表列出三次命中的起始位置(5、33、73)和各自的三段分组。

如果把标志从 g 改成 gi,对大小写不敏感的文本同样生效;若去掉 g 只留空标志,则只替换第一段 2026-10-21,明细表也只有一行——这正是「g 决定全部还是第一处」最直观的差别。

再试一个提取例子:把正则表达式换成 订单\s+(\w+)、替换为 单号=$1,就能从「订单 A-1024」里把 A-1024 抓出来写成「单号=A-1024」。可见规则与模板解耦后,换个需求几乎零成本。

一个容易忽略的细节:替换模板里如果同时出现多个捕获组引用,顺序要和你写正则时左括号的顺序严格对应。先在「匹配明细」里核对每一组的实际内容,再决定 $1、$2 怎么排,能避免把「月」填进「日」的位置这类错位。

输入范围与对照表

下表列出四个输入项的允许范围、默认值与越界时的提示口径,共 6 行:

输入项允许范围默认越界提示
原文本任意文本,最长 50000 字三行含日期示例为空时提示「原文本为空」并停算
正则表达式合法正则语法(\d{4})-(\d{2})-(\d{2})为空提示「正则表达式为空」;语法错误原样带出引擎报错
标志g/i/m/s/u/y 的任意不重复组合g含其它字符或重复字符时逐个指出非法字符
替换为任意串,支持 $1 $2 $$$2/$3/$1$n 的 n 超出分组数时提示但不阻断
匹配次数0 ~ 文本长度30 次时结果区等于原文本,并提示「没有匹配」
明细表≤ 12 行直接显示3 行超过 12 行时只显示前 12 行并注明总数

结果边界与舍入

无匹配也是正常结果。当正则表达式一处都命中不了,替换后的文本就等于原文本,匹配次数显示 0,明细表为空。这不算错误,只是说明规则没对上内容——多数情况是转义漏了或字符集写错。

标志冲突与空标志。标志留空完全合法,只是只替换第一处;但若写了 g 之外的 y(粘连)又没配合 lastIndex,可能一次都匹配不到。本页会在结果区下方提示「0 次匹配」,帮你快速定位是规则问题还是标志问题。

替换串里的组越界。若模板写了 $5 但正则只有 3 个捕获组,浏览器会把它当成空串处理而不报错。本页识别到这种情况会在提示区说明「$5 超出分组数(共 3 组),已按空串处理」,避免你误以为替换成功。

文本不上传。所有匹配、替换都在当前页面完成,页面没有提交逻辑,刷新即丢失;本工具不接触服务器,也不记录你粘贴的内容。

常见问题

为什么我写的替换只改了第一处?

因为没加 g 标志。g 表示 global,缺它时引擎只处理第一处匹配。想要全部替换,标志里加上 g 即可(如 g 或 gi)。

想在结果里显示一个美元符号,为什么变成了空?

替换串里的 $ 是组引用前缀,单独的 $ 引擎无法解释。要输出字面量美元号,必须写成 $$。例如模板 $$$1 会产出「$」加第 1 组内容。

贪婪和惰性到底差在哪?

用 @.+@ 去匹配「@a@b@」,贪婪的 .+ 会一直吃到最后一个 @,得到「a@b」;改成惰性的 @.+?@ 则在第一个 @ 就停,得到「a」。同一段文本,只差一个 ? 结果完全不同。

标志里能写正则不支持的字母吗?

不能。本页只接受 g/i/m/s/u/y 这六个,且不许重复。写了别的字符(如 d、x)或超过一个相同字母,提示区会逐字指出哪个非法,替换不会执行。

匹配了几十处,明细表会不会很长?

明细表默认完整列出;当超过 12 行时只显示前 12 行并在表尾注明「共 N 处」,避免长文本把页面撑爆。替换结果文本不受此限制,仍包含所有命中。

捕获组顺序搞反了怎么办?

组号按左括号出现的先后从 1 递增。把正则和替换模板并排看:第几个 ( 就对应第几个 $n。本页明细表列出每组内容,直接对照就能发现哪一组放错了位置。

正则里要匹配点号或斜杠怎么写?

点号 . 在正则里是任意字符,想匹配字面点要转义成 \.;斜杠 / 在 JS 字面量里才需要转义,本页用构造函数接收字符串,斜杠直接写即可。常见坑是忘了转义点,导致多匹配了无关字符。

粘贴的内容会被保存或上传吗?

不会。正则匹配与替换全部在浏览器本地运行,页面没有提交与云端写入逻辑,关闭或刷新后输入即消失。

相关工具