文本对比工具

粘贴两段文本即可实时查看差异。基于 LCS(最长公共子序列)算法计算行级差异, 并对修改行做行内 LCS 高亮:可选字符级(精确到每个字符)或词级(Git --word-diff 风格,按单词/标点切分), 被删除段标红底、被新增段标绿底。 支持分屏对比与统一 diff 两种视图,配大小写敏感、忽略空白、忽略空行、行内高亮模式切换等比较选项。 所有数据在浏览器本地处理,适合对比配置文件、代码片段、Markdown 文档等。

相同 0+0-0修改 0相似度 100%
在上方输入原文与修改后文本,即可实时查看差异。
基于 LCS(最长公共子序列)算法实时计算行级差异,支持分屏对比与统一 diff 两种视图。所有数据在浏览器本地处理。

常见问题

LCS 算法是什么?为什么用它做文本对比?

LCS(Longest Common Subsequence,最长公共子序列)是经典动态规划算法, 用于找出两个序列中最长的、保持相对顺序的公共子序列。在文本对比场景下,把每行视作一个元素, LCS 能找出两段文本中所有相同的行,剩余的行即为新增或删除。

LCS 的优势是结果稳定:相同输入永远得到相同输出,且能最大化保留相同行, 使差异最小化。它的复杂度是 O(m×n)(m、n 为两段文本的行数),对几千行以内的文本足够快。 Git 的 diff 也是基于 LCS 的变种算法(Myers diff)。

分屏对比和统一 diff 有什么区别?

分屏对比:左右两栏并排显示,左侧原文、右侧修改后,删除的行在左侧用红色高亮, 新增的行在右侧用绿色高亮,相同行两侧都显示。适合人工 review,直观对比修改位置。

统一 diff(unified):单栏显示,每行前加 + / - / 空格前缀, 类似 git diff 的输出格式。适合复制粘贴到 commit message、PR 描述、邮件等场景。 本工具的「复制 diff」按钮即复制统一 diff 格式。

为什么我的修改行被识别成「一删一增」而不是「修改」?字符级与词级高亮如何工作?

行级 diff 只能识别整行的删除与新增。如果一行中只改了几个字符, LCS 仍会把它视为「删除旧行 + 新增新行」。要识别行内修改,需要对相邻的 delete+insert 块再做一次更细粒度的 LCS。

本工具提供三种行内高亮模式(工具栏「行内高亮」单选组切换):

  • 字符级:按字符做 LCS,精确标记每个被修改的字符。粒度最细,但对版本号 1.0.0 → 2.0.0 这类修改可能过于细碎。
  • 词级:按单词 / 标点切分后做 LCS,类似 git diff --word-diff。版本号会被视为整体,1.0.0 → 2.0.0 只标记整体替换。
  • :仅行级 diff,不做行内高亮。对比超大文本时可提升性能。

「修改」统计数是相邻的 delete+insert 配对数。 词级切分使用 Unicode 感知正则(\p{L} 字母 + \p{N} 数字), 能正确处理中文、日文等非 ASCII 字符。

「相似度」百分比是怎么算的?

相似度公式:相似度 = 相同行数 / (相同行数 + max(新增行数, 删除行数)) × 100%。 分母用 max 而非 sum,是为了避免「修改一行」被双重计数(修改一行既算删除也算新增, 用 max 取较大值更合理)。

例如两段文本各 100 行,其中 80 行相同、10 行被修改(10 删 10 增), 相似度 = 80 / (80 + 10) = 88.9%。这个指标常用于代码重复度检测、文档相似度评估等场景。

「忽略行首尾空白」和「忽略空行」有什么用?

忽略行首尾空白:比较时去掉每行开头和结尾的空格 / 制表符。适用于对比 缩进不一致的代码(如 Tab vs 4 空格)、Markdown 列表项的缩进差异等。

忽略空行:比较时跳过完全空白的行。适用于对比两段格式不同但内容相同的文本, 例如一段代码被自动格式化工具插入了空行,启用此选项后差异会显著减少。

注意:这两个选项只影响比较时的相等判断,差异结果中仍显示原始行内容, 不会修改你的文本。

能对比 JSON / YAML / TOML 等结构化数据吗?

可以,但本工具做的是纯文本对比(按行 split 后比较)。 如果两段 JSON 的字段顺序不同,即使语义相同,本工具也会标记为大量差异。

对结构化数据,更准确的做法是先格式化(如 JSON 工具 的格式化功能、 YAML 工具TOML 工具),让字段顺序一致后再对比。 也可以用专门的语义化 diff 工具(如 jdjson-diff)。

支持多大的文本?会卡吗?

LCS 算法的复杂度是 O(m×n),对 1000 行 × 1000 行的文本约需 100 万次比较, 现代浏览器毫秒级完成。对 5000 行 × 5000 行约需 2500 万次比较,可能产生 100ms 级延迟, 仍可接受。

若超过 1 万行,建议先用 diff 命令行工具或专门的性能优化算法 (如 Myers diff 的 O((m+n)·D) 复杂度,D 为差异总数,差异少时极快)。 本工具面向日常对比需求,未做超大文本优化。

数据会上传到服务器吗?

不会。本工具完全在浏览器内运行,所有文本对比在本地完成,不会上传到任何服务器, 也不会被记录。适合对比敏感的配置文件、密钥、合同条款等。