文本Diff对比器

举报
yd_280683556 发表于 2026/09/06 23:34:49 2026/09/06
【摘要】 作品简介:文本Diff对比器,LCS行级差异高亮,红色删除绿色新增,行号对齐并排展示,结果清晰直观。文本 Diff 对比器项目简介文本 Diff 对比器是一款零依赖的纯前端文本差异查看工具,把「原文 A」与「新文 B」逐行对比,红色高亮被删除的行、绿色高亮新增的行,让代码改动、配置变更、文章修订的差异一目了然。对比引擎采用行级最长公共子序列(LCS)算法,保证得到增删行数最少的差异结果。整个...
文本Diff对比器 preview

文本 Diff 对比器

项目简介

文本 Diff 对比器是一款零依赖的纯前端文本差异查看工具,把「原文 A」与「新文 B」逐行对比,红色高亮被删除的行、绿色高亮新增的行,让代码改动、配置变更、文章修订的差异一目了然。对比引擎采用行级最长公共子序列(LCS)算法,保证得到增删行数最少的差异结果。

整个应用由单个 HTML 文件承载,零依赖、零后端,打开即用。并排视图两侧行号严格对齐,差异块内删除行在前、新增行在后,与 Git 的差异展示习惯一致。

核心功能

  • 行级差异高亮:左右并排展示,红色为「仅存在于原文」的删除行,绿色为「仅存在于新文」的新增行,灰色为相同行,两侧行号一一对齐。
  • LCS 最少差异:动态规划求最长公共子序列后回溯,保证任何两段文本的增删行数最少;差异块内稳定排序(删除行在前、新增行在后)。
  • 统计徽标:结果区实时显示「相同 / +新增 / -删除」行数,一眼看出改动规模。
  • 行号标注:每个 diff 事件行标注其在原文(A 列)或新文(B 列)中的原始行号,便于定位到源文件。
  • 输入便捷:原文/新文双栏文本域,行数实时计数;支持 A/B 一键交换、填入示例、一键清空。
  • 大文本防护:单侧最多 1500 行、两侧行数乘积不超过 350 万,超限就地提示先拆分输入,避免页面卡死。
  • 安全转义:所有文本经 HTML 转义后渲染,粘贴任意代码或符号不会破坏页面结构。

技术架构

应用采用「输入解析层 → LCS 引擎 → 事件排序 → 并排渲染层」的分层结构,全部运行在浏览器端,无后端依赖。

系统架构图
  • 输入解析层:读取两侧文本域,统一 \r\n/\r  \n,再按行切分为数组(空文本得空数组、尾部空行剔除),两侧行数实时统计。
  • LCS 引擎:对 A、B 两行数组做动态规划——以展平 Int32Array 存储 (n+1)×(m+1) 的 LCS 长度表,内存紧凑;随后从表尾回溯,same(两行相等)、del(A 侧独有)、add(B 侧独有)三种事件依次入栈后反转。
  • 事件排序:把相邻的差异事件划分成块(以 same 行为边界),每个差异块内按「删除行在前、新增行在后」稳定重排,与 Git 展示风格一致。
  • 并排渲染层:将事件序列渲染为双列网格——same 两列都显示并标注各自行号;del 仅左列显示红色删除行;add 仅右列显示绿色新增行;空行以占位符保持网格对齐,差异行高亮只在行内文本背景上体现。

核心逻辑说明

文本切行splitLines(t) 归一化换行符后按 \n 切分,行首尾均不额外裁剪空白,保证与编辑器所见一致。

LCS 动态规划diffLines(A, B) 构建长度表 L[i][j]A[i-1] === B[j-1]  L[i][j] = L[i-1][j-1] + 1,否则取 max(L[i-1][j], L[i][j-1])。回溯时相等行记为 sameL[i-1][j] >= L[i][j-1] 记为 del(A 行不匹配),否则记为 add(B 行不匹配),扫尾后反转即得从前往后的差异事件序列。

差异块排序orderEvents(events) 遍历事件,遇 same 直接输出;连续非 same 段先收集再按 del 优先重排输出,保证同一改动块内「先显示被删除的内容、再显示新增的内容」。

边界行为:两文本完全一致 → 全部 same、增删统计为 0;一侧为空 → 另一侧全量记为新增或删除;空文本对空文本 → 显示「无可对比内容」空态。

技术栈

技术 用途
HTML5 页面结构、双栏文本域、统计徽标
CSS3 并排双列网格、红/绿差异高亮、行号列
原生 JavaScript LCS 动态规划、事件回溯、差异块排序、文本转义
零网络请求 全部对比计算均在浏览器本地完成

使用方式

直接用浏览器打开 index.html 即可使用。左侧粘贴原始文本、右侧粘贴修改后的文本,点击「对比 Diff」即可看到逐行差异;「⇄ 交换 A/B」可互换两侧,「填入示例」提供一份代码改动的演示数据。

亮点与价值

  • 零依赖、开箱即用:单个 HTML 文件承载全部能力,部署只需一个静态服务器。
  • 算法可靠:LCS 动态规划保证增删差异最少,结果经 11 组差异场景向量验证(相同、删行、替换、头尾增行、空侧、多行移动等)。
  • 展示专业:行号对齐 + 差异块内 del 在前 add 在后,风格贴近 Git diff,代码审查与文案修订都适用。
  • 防护完善:超长输入安全拦截、文本 HTML 转义、500 行同文对比流畅完成,零 JS 错误。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。