Текст

Text Diff

Порівняння двох текстів рядок за рядком — що додано, видалено чи змінено, зі словом-рівневим підсвічуванням у змінених рядках.


                        
                    

Text Diff порівнює два тексти рядок за рядком і показує, що додано, видалено чи змінено, з підсвічуванням на рівні слів у змінених рядках — так само, як diff у git, але без командного рядка.

Як користуватися

Типові сценарії

Що варто памʼятати

За замовчуванням зміна лише в пробілах чи відступах теж вважається відмінністю, бо технічно змінює вміст рядка.

Diff порівнює рядки за позицією, тому додавання чи видалення одного рядка на початку може «зсунути» порівняння решти тексту.

Стаття про цей інструмент: Text Diff: як алгоритми знаходять різницю між текстами

Часті запитання

Як обчислюється порівняння?

Порівняння відбувається рядок за рядком: кожен рядок визначається як доданий, видалений чи змінений, а в межах змінених рядків підсвічуються точні слова, що відрізняються.

Як відображаються додавання, видалення та зміни?

Додані й видалені рядки позначаються як такі в результаті, а змінені рядки показують підсвічування на рівні слів, щоб одразу помітити, що змінилося, без перечитування всього рядка.

Чи надсилаються мої два тексти на сервер?

Ні, порівняння повністю виконується в браузері на JavaScript — жоден вміст нікуди не надсилається.

Чому вставка одного рядка показує зміненими всі наступні?

Алгоритм не завжди безпомилково розпізнає, що це саме вставка, а не масова заміна — особливо якщо навколишні рядки схожі між собою. Хороші diff-алгоритми намагаються мінімізувати такі хибні спрацьовування, шукаючи найдовшу спільну підпослідовність, але це не завжди ідеально.

Чи враховуються пробіли при порівнянні?

Так, за замовчуванням зміна лише в пробілах (наприклад, відступах) також позначається як відмінність, оскільки технічно це зміна вмісту рядка.

Статті: Текст

Case Converter: навіщо потрібні різні стилі написання

Чому в одному проєкті змінні пишуть camelCase, а файли — kebab-case, і звідки взялись ці правила.

Регулярні вирази: основний синтаксис і типові патерни

Як читати регулярний вираз і чим жадібний пошук відрізняється від лінивого.

Сортування та видалення дублікатів рядків: навіщо це потрібно

Чому числове сортування «10» перед «9» — це помилка, і як цього уникнути.

String Escape: чому той самий текст треба екранувати по-різному

Чому той самий символ лапок екранується по-різному в JS-рядку, JSON і shell-команді.

CRLF проти LF: чому символи кінця рядка досі мають значення

Чому файл, написаний у Windows, може показувати «змінений увесь файл» у git на Linux.

Підрахунок символів і слів: чому це не завжди тривіально

Чому емодзі чи символи з діакритикою можуть рахуватись як кілька символів одразу.

Lorem Ipsum: звідки взявся текст-заповнювач і навіщо він потрібен

Чому дизайнери навмисно використовують «безглуздий» текст замість реального контенту в макетах.

Slugify: як перетворити довільний текст на URL-адресу

Як заголовок «Привіт, Світ!» перетворюється на URL-сумісний рядок вигляду pryvit-svit.

Markdown: чому простий текстовий синтаксис переміг складні редактори

Чому розробники обирають писати документацію в Markdown, а не в форматованому текстовому редакторі.

Пробіли та невидимі символи: прихована причина дивних багів

Чому два на вигляд однакові рядки можуть не збігатися при порівнянні через невидимий символ.

Text Reverse: чому «перевернути текст» складніше, ніж здається

Чому наївний реверс рядка може перетворити емодзі на непридатні для показу байти.

Частотний аналіз тексту: навіщо рахувати повторення слів

Як частота літер у зашифрованому тексті допомагає зламати найпростіші шифри підстановки.