Как пользоваться
Вставьте исходный текст в поле «Было», а изменённый — в поле «Стало». Отличия появятся сразу:
Галочки «Не учитывать пробелы» и «Не учитывать регистр» убирают из сравнения лишние пробелы, отступы и разницу между заглавными и строчными буквами: видно только содержательные правки.
- красным — строки, которых нет во втором тексте (удалены);
- зелёным — строки, которых не было в первом (добавлены);
- если строка изменена, она показана как пара «удалена + добавлена», а отличающиеся слова и знаки внутри неё выделены ярче.
Над результатом — счётчик добавленных и удалённых строк. Режим «Рядом» ставит тексты в две колонки, «Единым списком» — показывает изменения подряд, как git diff. На телефоне результат всегда единым списком: две колонки не помещаются. Длинные куски без изменений сворачиваются до трёх строк вокруг каждой правки — снимите галочку «Скрывать одинаковые строки», чтобы увидеть всё.
Тексты сравниваются в браузере и никуда не отправляются: можно сравнивать договоры, конфиги и код.
Пример
| Было | Стало |
|---|---|
| Список покупок: | Список покупок: |
| молоко — 2 л | молоко — 1 л |
| хлеб | хлеб |
| яйца — 10 шт. | яйца — 10 шт. |
| сыр | кофе |
| кофе | сахар |
Результат: добавлено 2 строки, удалено 2. Строка про молоко изменена — внутри неё подсвечены «2» и «1». «Сыр» удалён, «сахар» добавлен, остальные строки совпадают. Этот пример открыт в сравнении по умолчанию.
Как это работает
Тексты делятся на строки, и программа ищет кратчайший набор правок — минимум удалённых и добавленных строк, превращающий первый текст во второй. Это алгоритм Майерса, тот же, что по умолчанию использует git diff. Внутри пары изменённых строк тем же способом сравниваются слова, пробелы и знаки препинания.
Если у строк нет ни одного общего слова, подсветка внутри не нужна — такая строка просто показана как удалённая и добавленная.
Частые вопросы
Почему абзац, который я переставил, показан как удалённый и добавленный? Сравнение ищет общую последовательность строк в исходном порядке. Перемещённый блок в ней не может остаться на месте, поэтому он показан удалённым в старом месте и добавленным в новом.
Отличий не видно, но строки помечены как изменённые. Скорее всего, разница в невидимых символах: пробел в конце строки, табуляция вместо пробелов, неразрывный пробел. Разные переводы строк (Windows \r\n и Unix \n) не считаются отличием. Убрать пробелы по краям строк можно в обработке списка строк.
Подходит ли для больших текстов? Да: тексты в десятки тысяч строк сравниваются за доли секунды, если отличий не слишком много. Совсем разные большие тексты считаются дольше.
Можно ли сравнить два JSON? Можно, но сначала приведите оба к одному виду в JSON форматтере с сортировкой ключей — тогда в сравнении останутся только настоящие отличия, а не разница в отступах и порядке полей.