Сравнение текстов: найти отличия онлайн

Вставьте два варианта текста — увидите добавленные, удалённые и изменённые строки с подсветкой отличающихся слов. Показ рядом или единым списком, счётчик изменений.

Добавлено строк: 2Удалено строк: 2

11Список покупок:
2молоко — 2 л
2молоко — 1 л
33хлеб
44яйца — 10 шт.
5сыр
65кофе
6сахар

Как пользоваться

Вставьте исходный текст в поле «Было», а изменённый — в поле «Стало». Отличия появятся сразу:

Галочки «Не учитывать пробелы» и «Не учитывать регистр» убирают из сравнения лишние пробелы, отступы и разницу между заглавными и строчными буквами: видно только содержательные правки.

Над результатом — счётчик добавленных и удалённых строк. Режим «Рядом» ставит тексты в две колонки, «Единым списком» — показывает изменения подряд, как git diff. На телефоне результат всегда единым списком: две колонки не помещаются. Длинные куски без изменений сворачиваются до трёх строк вокруг каждой правки — снимите галочку «Скрывать одинаковые строки», чтобы увидеть всё.

Тексты сравниваются в браузере и никуда не отправляются: можно сравнивать договоры, конфиги и код.

Пример

Было Стало
Список покупок: Список покупок:
молоко — 2 л молоко — 1 л
хлеб хлеб
яйца — 10 шт. яйца — 10 шт.
сыр кофе
кофе сахар

Результат: добавлено 2 строки, удалено 2. Строка про молоко изменена — внутри неё подсвечены «2» и «1». «Сыр» удалён, «сахар» добавлен, остальные строки совпадают. Этот пример открыт в сравнении по умолчанию.

Как это работает

Тексты делятся на строки, и программа ищет кратчайший набор правок — минимум удалённых и добавленных строк, превращающий первый текст во второй. Это алгоритм Майерса, тот же, что по умолчанию использует git diff. Внутри пары изменённых строк тем же способом сравниваются слова, пробелы и знаки препинания.

Если у строк нет ни одного общего слова, подсветка внутри не нужна — такая строка просто показана как удалённая и добавленная.

Частые вопросы

Почему абзац, который я переставил, показан как удалённый и добавленный? Сравнение ищет общую последовательность строк в исходном порядке. Перемещённый блок в ней не может остаться на месте, поэтому он показан удалённым в старом месте и добавленным в новом.

Отличий не видно, но строки помечены как изменённые. Скорее всего, разница в невидимых символах: пробел в конце строки, табуляция вместо пробелов, неразрывный пробел. Разные переводы строк (Windows \r\n и Unix \n) не считаются отличием. Убрать пробелы по краям строк можно в обработке списка строк.

Подходит ли для больших текстов? Да: тексты в десятки тысяч строк сравниваются за доли секунды, если отличий не слишком много. Совсем разные большие тексты считаются дольше.

Можно ли сравнить два JSON? Можно, но сначала приведите оба к одному виду в JSON форматтере с сортировкой ключей — тогда в сравнении останутся только настоящие отличия, а не разница в отступах и порядке полей.