文本对比工具 — 并排比较两段文本或 JSON 文件
比较文本、代码或 JSON 文件的两个版本,准确看出哪些行、词和字符发生了变化。
发现问题,或者觉得哪里可以更好?每条消息我们都会阅读,并尽快修复。
这款免费的文本对比工具会逐行比较两段文本,显示改动之处,并在每行中高亮具体改动的词或字符。可以用它比较合同的两版草稿、配置文件的两个版本、修改后的文章与原文,或者两个 API 响应。可在并排视图和统一视图之间切换,在空白或大小写差异无关紧要时将其忽略。
JSON 模式会解析两侧内容并比较数据而非文本,因此键的顺序调整不会被当作改动,每一处真正的差异都会按路径列出,例如 $.scripts.dev 从“next dev”变为“next dev -p 3300”。两段文本都只留在你的浏览器中。比较使用 Myers 算法(git diff 和 GNU diff 背后的算法),并设有时间限制,所以粘贴两个 5,000 行的文件也不会让页面卡住;几乎处处不同的输入会被报告为差异过大,而不是一直转圈。
使用方法
- 把原始文本粘贴到左侧,修改后的文本粘贴到右侧。比较会随输入实时进行。
- 查看新增和删除行的数量,然后浏览高亮的行。红色表示删除,绿色表示新增;颜色更深的高亮标出具体改动的词。
- 对于重新缩进过的代码,打开“忽略空白”;如果大小写不重要,打开“忽略大小写”。
- 切换到 JSON 模式,可按结构比较两个 JSON 文档,并得到有变化的路径列表。
- 将结果复制或下载为纯文本 diff,或点击“交换两侧”反向比较。
常见问题
如何比较两段文本的差异?
把一个版本粘贴到“原始”框,另一个粘贴到“修改后”框。被删除的行显示为红色,新增的行显示为绿色,有改动的行则两种颜色都有,并高亮改动的词。未改动的大段内容会被折叠,方便你在各处改动之间跳转;关闭“折叠未改动的行”即可查看全部内容。
并排 diff 和统一 diff 有什么区别?
并排视图把两个版本放在平行的两栏中,阅读文章和短行时最方便。统一视图只有一栏,删除的行标为 −,新增的行标为 +,这是 git 和补丁文件使用的格式,在窄屏上效果更好。两种视图显示的改动完全相同。
可以比较 JSON 文件并忽略键的顺序吗?
可以。切换到 JSON 模式。两侧都会被解析,对象按键逐一比较,与键出现的顺序无关;数组则按位置逐一比较,因为数组中的顺序通常是有意义的。你会得到一张列出所有新增、删除和修改路径的表格,以及两个文档按键排序并重新缩进后的逐行对比。
“忽略空白”有什么作用?
判断两行是否相同时,它把连续的空格和制表符视为一个空格,并忽略行首和行尾的空格。这样就能隐藏缩进变化和行尾空格,在代码被重新格式化后很有用。各行仍按你粘贴的原样显示。
有大小限制吗?
没有固定上限。在笔记本上,几千行的文件比较只需不到一秒,大段未改动的行会被折叠,页面始终保持流畅。如果两个大文件几乎每一行都不同,比较会在几秒后停止并提示你,而不会让标签页卡死。
我的文本会被上传吗?
不会。比较在你浏览器中的 JavaScript 里运行,你粘贴的任何内容都不会发送到服务器或被保存。因此它适合处理合同、源代码和含有密钥的配置文件——不过往任何网站粘贴内容时,常规的谨慎依然适用。
diff 是如何计算的
diff 会找出两个版本按顺序共有的最长行序列,其余部分都报告为删除或新增。本工具通过 jsdiff 库使用 Eugene Myers 1986 年提出的 O(ND) 算法:两段文本越相似(D,即差异数量越小)速度越快,差异越大则越慢,这就是设置时间限制的原因。
所谓改动的行,实际上是一行删除加上一行新增。当一组删除紧挨着一组新增时,工具会把它们逐行配对,并在每一对内部再做一次更细的按词或按字符比较。按词比较适合文章和大多数代码;按字符比较能精确显示一个字母的笔误或一个数字的改动。
常见用途
• 合同和政策:不必依赖对方的修改说明,就能准确看到对方改了哪些条款。
• 内容编辑:在批准之前,把已发布的文章与编辑的修订版进行比较。
• 配置文件:比较正常和出错的配置文件,或预发布环境和生产环境的环境文件。
• API 响应:在 JSON 模式下粘贴两个 JSON 响应,查看不同版本之间哪些字段发生了变化。
• 列表:比较两次导出的邮箱地址或 SKU。先用文本清理工具把两边都排好序,以免顺序不同造成干扰。