批量查找替换
支持正则与捕获组($1 引用),替换前先看命中数。
正则提示
用 (\d+) 这样的捕获组时,替换框里用 $1 引用;$& 表示整个匹配。写错正则会立刻报错,不会改到文本。
什么时候用
- 导出数据里混着全角括号、连续空格和不换行空格(U+00A0),要一次清干净:正则写 [\u00A0 ]+ 比手改几十处快。
- 把 2024-01-05 这种日期批量改成 2024/01/05,或在每个手机号前加国家码,同时用捕获组保留原来的数字时。
什么时候不用
- 需要跨行匹配或让 ^ $ 按行生效:本页固定用 g 和可选的 i,没有 m 和 s,^ 只匹配整段开头,. 也不跨行。
- 替换规则需要条件判断(不同情况换成不同内容,或要计算新值):写脚本(sed、Python)比堆正则更可靠。
限制与隐私
替换在本地完成,文本不上传。限制:正则固定用 g 和可选的 i,没有 m/s/u,所以 ^ $ 只对整段生效、. 不跨行、\p{...} 不可用;只当纯文本处理,不解析 HTML/CSV 结构;几 MB 以上的文本一次性替换会明显卡顿。
常见问题
正则写错会不会把原文改坏?
不会。输入框的内容从不被写回,结果只出现在输出框;正则编译失败时替换根本不会执行,输出框保持上一次的结果。问题在于错误信息只出现在浏览器控制台,页面上不一定有提示,点了没反应通常就是正则有问题(括号没闭合、[ 没有配 ])。
为什么 \p{L} 或 \u{1F600} 匹配不到东西?
正则用 new RegExp(..., 'gi') 构建,没有 u 标志,于是 \p 被当成普通字母 p,\u{1F600} 被当成字面量 u{1F600},不报错但匹配不到。要用 Unicode 属性或码点转义,只能改写成代理对(如 \uD83D\uDE00)或直接写具体字符。