文本对比 API
按行 / 词 / 字符对比两段文本(Myers 算法),给出增删统计、相似度和 unified 格式差异
数据来源:本地计算
返回统一的 JSON 格式 { code, message, cached, stale, updatedAt, data },支持跨域,免注册每天可免费调用 100 次,注册后每天 10000 次。
文本对比:按行 / 词 / 字符找出差异,返回编辑操作列表和 unified diff(长文本请用 POST)
GET /api/tools/diff
请求参数
a(必填):原文本(旧版本),最多 200 KB;按行对比最多 20000 行,按词 50000 个词,按字符 20000 个字符。受请求体 100KB 上限影响,经 HTTP 调用时两段合计不超过约 100KB,示例第一行 第二行 第三行b(必填):新文本(新版本),限制同 a,示例第一行 第 2 行 第三行 第四行mode:line 按行 / word 按词(连续字母数字算一个词,每个汉字单独算)/ char 按字符,示例lineignoreWhitespace:是否忽略空白:按行对比时去掉所有空白再比较(同 diff -w);按词 / 字符对比时任意空白视为相同。true / false,示例falseignoreCase:是否忽略大小写,true / false,示例falsecontext:unified 差异中每处改动前后保留的上下文行数,0~100,示例3
返回字段
mode(string):对比粒度:line / word / charidentical(boolean):两段文本在当前比较规则下是否完全相同stats(object):统计信息(单位随 mode:行 / 词 / 字符)stats.added(number):新增数量(b 中新增的行 / 词 / 字符数)stats.removed(number):删除数量(a 中被删除的行 / 词 / 字符数)stats.unchanged(number):未变化的数量stats.oldCount(number):a 的总行数 / 词数 / 字符数(末尾换行不产生额外的空行)stats.newCount(number):b 的总行数 / 词数 / 字符数stats.similarity(number):相似度百分比 = 2 × 未变化数 ÷ (a 总数 + b 总数) × 100,保留 2 位小数;两段都为空时为 100ops(array):按顺序排列的编辑操作(相邻同类合并),依次应用可由 a 得到 b;最多 5000 条ops[].type(string):equal 相同 / insert 插入(来自 b)/ delete 删除(来自 a)ops[].count(number):这一段包含的行 / 词 / 字符数ops[].oldStart(number):在 a 中的起始位置:按行时为行号(从 1 开始),按词 / 字符时为字符偏移(UTF-16 下标,从 0 开始);insert 时表示插入点ops[].newStart(number):在 b 中的起始位置,规则同 oldStart;delete 时表示删除点ops[].value(string):这一段的原文(equal、delete 取自 a,insert 取自 b);按行时各行用 \n 连接ops[].lines(array):仅按行对比:这一段的各行文本(不含换行符)ops[].lines[](string):一行文本opsTruncated(boolean):ops 是否因超过 5000 条被截断(统计和 unified 不受影响)unified(string|null):仅按行对比:unified 格式差异(--- a / +++ b / @@ -起始,行数 +起始,行数 @@,行数为 1 时省略;末尾缺换行时标注 \ No newline at end of file);没有差异时为空字符串;按词 / 字符对比时为 null
文本对比:按行 / 词 / 字符找出差异,返回编辑操作列表和 unified diff(长文本请用 POST)(POST JSON 请求体,参数不进网址)
POST /api/tools/diff
请求参数
a(必填):原文本(旧版本),最多 200 KB;按行对比最多 20000 行,按词 50000 个词,按字符 20000 个字符。受请求体 100KB 上限影响,经 HTTP 调用时两段合计不超过约 100KB,示例第一行 第二行 第三行b(必填):新文本(新版本),限制同 a,示例第一行 第 2 行 第三行 第四行mode:line 按行 / word 按词(连续字母数字算一个词,每个汉字单独算)/ char 按字符,示例lineignoreWhitespace:是否忽略空白:按行对比时去掉所有空白再比较(同 diff -w);按词 / 字符对比时任意空白视为相同。true / false,示例falseignoreCase:是否忽略大小写,true / false,示例falsecontext:unified 差异中每处改动前后保留的上下文行数,0~100,示例3
返回字段
mode(string):对比粒度:line / word / charidentical(boolean):两段文本在当前比较规则下是否完全相同stats(object):统计信息(单位随 mode:行 / 词 / 字符)stats.added(number):新增数量(b 中新增的行 / 词 / 字符数)stats.removed(number):删除数量(a 中被删除的行 / 词 / 字符数)stats.unchanged(number):未变化的数量stats.oldCount(number):a 的总行数 / 词数 / 字符数(末尾换行不产生额外的空行)stats.newCount(number):b 的总行数 / 词数 / 字符数stats.similarity(number):相似度百分比 = 2 × 未变化数 ÷ (a 总数 + b 总数) × 100,保留 2 位小数;两段都为空时为 100ops(array):按顺序排列的编辑操作(相邻同类合并),依次应用可由 a 得到 b;最多 5000 条ops[].type(string):equal 相同 / insert 插入(来自 b)/ delete 删除(来自 a)ops[].count(number):这一段包含的行 / 词 / 字符数ops[].oldStart(number):在 a 中的起始位置:按行时为行号(从 1 开始),按词 / 字符时为字符偏移(UTF-16 下标,从 0 开始);insert 时表示插入点ops[].newStart(number):在 b 中的起始位置,规则同 oldStart;delete 时表示删除点ops[].value(string):这一段的原文(equal、delete 取自 a,insert 取自 b);按行时各行用 \n 连接ops[].lines(array):仅按行对比:这一段的各行文本(不含换行符)ops[].lines[](string):一行文本opsTruncated(boolean):ops 是否因超过 5000 条被截断(统计和 unified 不受影响)unified(string|null):仅按行对比:unified 格式差异(--- a / +++ b / @@ -起始,行数 +起始,行数 @@,行数为 1 时省略;末尾缺换行时标注 \ No newline at end of file);没有差异时为空字符串;按词 / 字符对比时为 null