使用方法
正则替换分四步:写下要处理的原文本,给出查找用的正则表达式,选择标志,再写「替换为」的模板。点「执行替换」或改动任意输入框,结果区、匹配次数与明细表会同步刷新;「复制替换结果」把整段替换后的文本带走,「复制匹配明细 TSV」则把下方表格粘进表格软件。
- 原文本支持多行,直接粘贴日志、CSV 片段或网页源码都行;中英文混排、emoji 都不会破坏匹配,引擎按 Unicode 码点处理。
- 正则表达式是查找规则。示例
(\d{4})-(\d{2})-(\d{2})用三组括号各抓「年」「月」「日」四个数字,连字符是字面量。 - 标志决定匹配方式:
g替换全部(不加则只动第一处),i忽略大小写,m让^/$每行独立,s让.也能匹配换行,u按码点解析,y从固定位置粘连匹配。 - 「替换为」里
$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 ~ 文本长度 | 3 | 0 次时结果区等于原文本,并提示「没有匹配」 |
| 明细表 | ≤ 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 字面量里才需要转义,本页用构造函数接收字符串,斜杠直接写即可。常见坑是忘了转义点,导致多匹配了无关字符。
粘贴的内容会被保存或上传吗?
不会。正则匹配与替换全部在浏览器本地运行,页面没有提交与云端写入逻辑,关闭或刷新后输入即消失。