免费查找与替换文本
使用普通或正则匹配进行文本搜索替换,实时显示匹配数量和高亮预览。支持忽略大小写、全字匹配和正则捕获组反向引用。
💡 在正则模式下,可在“查找”中使用捕获组,如 (\d{4})-(\d{2}),并在“替换为”中用 $1、$2 引用,非常适合批量重新格式化日期、姓名或 ID。
常见用途
- 批量查找和替换文本一次性替换文本块中单词或短语的每个出现。
- 正则表达式查找和替换使用带有捕获组的正则表达式批量重新格式化文本。
- 在代码中查找和替换快速重命名变量或重写代码片段中的模式。
- 清理混乱的数据删除或规范化粘贴数据中的杂乱字符、分隔符和格式。
- 写作时替换单词在草稿中交换重复的单词或重命名角色。
工作原理
查找和替换完全在你的浏览器中使用 JavaScript 内置的 RegExp 引擎运行——没有库、没有服务器、不上传。你一输入,文本就在本地处理,使用 String.prototype.matchAll 计数,String.prototype.replace 替换。
- 1将模式编译为 RegExp你输入时,查找词会被编译为 JavaScript RegExp,并有 150 ms 防抖,以免病态模式在每次按键时卡住标签页。在纯文本模式中,每个正则元字符都会先转义,因此点号和方括号按字面处理。启用正则模式会直接使用你的模式。全词匹配模式用 \b(?:...)\b 词边界锚点包裹模式,忽略大小写模式会附加 i 标志。
- 2一次 matchAll 遍历完成计数和高亮对防抖后的文本调用一次 matchAll 即可得到所有匹配对象。匹配数直接从数组长度读取。对于少于 200,000 个字符的文本,会遍历匹配偏移、用 <mark> 标签包裹每个匹配来构建高亮预览——HTML 转义在插入之前应用于原始文本片段,而不是之后,因此包含 &、< 或 > 的匹配也能正确处理。
- 3用字面文本或捕获组反向引用替换输出由带全局标志的 String.prototype.replace 生成,一次替换所有匹配。在纯文本模式中,替换字符串里的每个 $ 都会加倍为 $$,因此 $& 和 $1 这样的字符会原样插入,而不会被解释为反向引用。在正则模式中,$1、$2 等作为标准 JavaScript 捕获组替换使用。
- 4复制或下载结果重写后的文本在你输入时显示在只读文本框中。复制使用浏览器的 navigator.clipboard.writeText API。下载会同步构建一个 text/plain 类型的 Blob 并在本地保存——任何时候都不会有内容离开你的设备。
指南
操作示例
假设一个列表里的日期是年在前,而你需要日在前。将“Invoice 2026-11-04 due 2026-12-15”粘贴到“你的文本”中,勾选“正则表达式”,在“查找”中输入 (\d{4})-(\d{2})-(\d{2}),在“替换为”中输入 $3/$2/$1。输入框下方的行会显示“2 个匹配结果”,两个日期都会高亮,而“结果”会显示“Invoice 04/11/2026 due 15/12/2026”。取消勾选该复选框时,相同的文本会按字面搜索,因此在 a.b.c 中搜索 . 会2 个匹配结果(即点号),而勾选后则会找到 5 处,因为此时 . 表示任意字符。“合并多个空格”快速清理功能会将“a b c d”变为“a b c d”(3 处匹配)。
使用哪些设置,以及限制
- 从纯文本开始。 取消勾选“正则表达式”时,你在“查找”中输入的内容会按原样搜索,“替换为”中的 $ 会作为普通美元符号插入。仅当你需要数字、可选部分或分组等模式时,才勾选该复选框。
- 检查大小写和全词匹配选项。 除非勾选了“忽略大小写”,否则匹配区分大小写,因此“cat”不会找到“Cat”。“全词匹配”会阻止“cat”匹配到“concatenate”和“category”中的部分。它同样适用于带重音的单词,如 café,以及中文和日文文本,其中每个字符边界都算作词边界。在“cat concatenate Cat category cat.”中,普通搜索 cat 会找到 4 处,而忽略大小写加全词匹配会找到 3 处。
- 在正则表达式模式下,注意行锚点。 这些模式使用 JavaScript 正则表达式语法。没有多行选项,因此 ^ 和 $ 只匹配整个文本的开头和结尾,而不是每一行的开头和结尾,并且 . 不会跨过换行符。要锚定到每一行,请使用 (?<=^|\n) 表示行首,使用 (?=\r?\n|$) 表示行尾。“查找”中的捕获组可在“替换为”中用 $1、$2 引用。
- 使用快速清理功能。 “快速清理”下有十个一键预设:“双引号转直引号”、“单引号转直引号”、“合并多个空格”、“删除换行符”、“制表符转空格”(四个空格)、“删除尾部空格”、“删除空行”,以及三个用于中文和日文文本的预设,分别用于转换全角字符、将标点转换为全角以及移除字符间的空格。预设会填入查找和替换内容,并勾选“正则表达式”。一旦你编辑任一输入框,那两个转换字符的预设就会停止转换。
- 加载文件而不是粘贴。 “加载文本文件”可打开 .txt、.csv、.log 和 .md 文件或其他文本文件,并在你的浏览器中读取。看起来是二进制的文件会被拒绝,而明显是其他类型的文件,如 DOCX 或 PDF,会被拒绝并显示一条指明其类型的消息。“下载 .txt”会以原始文件名和扩展名保存结果,因此 orders.csv 仍为 orders.csv;对于粘贴的文本,文件名为 find-replace-result.txt。
- 处理超大文本时预计会有停顿。 结果会在你停止输入后约 0.15 秒更新,当文本超过 200,000 个字符时需 0.35 秒,超过 1,000,000 个字符时需 0.7 秒。超过 200,000 个字符时,高亮预览会关闭,页面会显示“文本过大,已关闭高亮预览,下方结果仍为最新。”。匹配计数和结果会继续工作。该工具本身不检查文件大小,因此超大文件会受到你浏览器内存的限制。
常见问题及解决方法
- 它显示“无效的正则表达式”。
- 你的模式不是有效的正则表达式语法。这通常发生在勾选了“正则表达式”但搜索的是包含 ( [ * + ? 或反斜杠等符号的普通文本时。例如,在 Chrome 中,C++ 会提示“Nothing to repeat”,[abc 会提示“Unterminated character class”,单独的 ( 会提示“Unterminated group”。取消勾选该复选框可按字面搜索文本,或在每个符号前加上反斜杠,如 C\+\+。打开“详情”可查看浏览器自身的消息;其措辞因浏览器而异,并以英文显示。
- 它显示“无法读取该文件,请选择纯文本文件(.txt、.csv、.log、.md)。”
- 该文件看起来是二进制的:其前 4,096 个字符包含 NUL 字符,例如重命名为 .txt 的 Word、Excel 或 PDF 文件,或者浏览器无法读取它。请在其自带程序中打开原文件并复制文本,或先将其另存为纯文本或 CSV 文件。明显是其他类型的文件通常会更早被拒绝,并显示类似“report.docx 是一个 DOCX 文件,此工具无法打开。”的消息。
- 它显示“0 个匹配结果”,尽管文本明显存在。
- 请按以下顺序检查:除非勾选了“忽略大小写”,否则匹配区分大小写;勾选了“全词匹配”而文本位于一个更长的词内部;勾选了“正则表达式”,而 . 或 ( 等字符充当了模式;或者你文本中的空格、制表符和换行符与你输入的不同。计数会在你停止输入后几分之一秒内更新,因此更改后请稍等片刻。
- 替换结果显示的是键入的 $1 或 $&,而不是匹配到的文本。
- 像 $1 这样的引用仅在勾选“正则表达式”时有效,并且仅当“查找”中包含括号内的匹配组时才有效,例如 (\d+)。取消勾选该复选框时,每个 $ 都会按原样插入。如果模式没有第一个组,JavaScript 也会将 $1 保留为纯文本。
- 我在“替换为”中输入了 \n,但得到的是反斜杠和 n,而不是换行符。
- “替换为”是一个单行输入框,不会将 \n 转换为换行符,因此它会插入这两个字符。在“查找”中,勾选“正则表达式”时,\n 和 \r?\n 确实能匹配换行符,这就是“删除换行符”和“删除空行”的工作原理。无法在替换内容中输入换行符,因此要添加换行符,请使用支持此功能的文本编辑器。
对比分析
文字处理器或代码编辑器会逐个遍历匹配项,在原位置编辑文档,可以跨多个文件工作并提供撤销功能。本页面则相反:它一次性替换你文本副本中的所有匹配项,首先显示实时计数和高亮匹配项,并将你的原始文本保留在第一个输入框中,直到你更改它。它的正则表达式是 JavaScript 的,在细节上与其他编辑器和命令行工具中的风格不同。例如,命名组写作 (?<name>...) 而非 (?P<name>...),没有逐行锚点,且无法在替换内容中输入换行符。它适用于一个粘贴的文本块或一个日志或 CSV 文件;对于整个文件夹的文件,请使用编辑器或脚本。