Herramienta de Comparación de Texto
¿Qué es la Comparación de Texto?
Text Diff compara dos versiones de texto y resalta qué líneas o secciones se añadieron, eliminaron, cambiaron o permanecieron iguales. Es útil para revisar fragmentos de código, archivos de configuración, traducciones, borradores de contrato, documentos Markdown, versiones de prompts, notas de versión y extractos de logs sin leer ambas copias manualmente. Resulta especialmente valioso cuando una edición pequeña está escondida en un archivo largo o cuando formato, espacios, puntuación u orden pudieron cambiar sin querer. Un diff no decide si la nueva versión es correcta; solo muestra con precisión dónde difieren los textos para facilitar la revisión real.
Cómo usar
Cómo usar
- Pega el texto original en el cuadro de entrada izquierdo
- Pega el texto modificado en el cuadro de entrada derecho
- El sistema calcula y resalta automáticamente las diferencias, y la barra de estado muestra el número de líneas añadidas y eliminadas
Consejos de revisión
- Normaliza los saltos de línea y los espacios en blanco antes de comparar cuando el cambio real sea de contenido y no de formato.
- Para código o texto legal, revisa manualmente los cambios resaltados; la comparación automática muestra diferencias, pero no valora la intención ni la corrección.
Casos de uso
Principio técnico
La comparación a nivel de línea se basa en el problema de la Subsecuencia Común Más Larga (LCS): dadas dos secuencias de líneas A y B, encontrar la secuencia más larga que aparece en ambas en el mismo orden relativo. Todo lo que no está en la LCS es una inserción (presente en B pero no en A) o una eliminación (presente en A pero no en B), que es exactamente el conjunto de filas rojas y verdes que muestra la vista lado a lado. La tabla de programación dinámica ingenua para LCS se ejecuta en tiempo y espacio O(M * N), donde M y N son los conteos de líneas de las dos entradas. En la práctica, el motor de diff utiliza el algoritmo de diff de Myers (Eugene Myers, 1986), que resuelve el mismo problema en tiempo O((M + N) * D), donde D es la distancia de edición entre los dos archivos. Para dos archivos mayoritamente idénticos, D es pequeño y Myers es drásticamente más rápido que la tabla completa de PD; el backend de diff predeterminado de Git, la vista web de diff de GitHub y la mayoría de paneles de diff de IDEs utilizan Myers o uno de sus descendientes (patience diff, histogram diff) por esta razón. Patience diff además alinea primero las líneas que aparecen de forma única, lo que produce bloques más legibles cuando se han movido secciones de código. La salida es una secuencia de operaciones de igual/insertar/eliminar renderizada como un diff unificado en herramientas de CLI (con encabezados de bloque @@ -m,n +p,q @@ y un prefijo +/- por línea) o como filas coloreadas lado a lado en una interfaz web. Los diffs a nivel de carácter o palabra utilizan el mismo algoritmo sobre una secuencia de granularidad más fina, a menudo combinado con la distancia de Levenshtein (costes de inserción + eliminación + sustitución) cuando las sustituciones deben contarse como una operación única. La biblioteca diff-match-patch de Neil Fraser es la implementación de referencia habitual para diffs a nivel de carácter en web.
- Base LCS: la Subsecuencia Común Más Larga de los dos arrays de líneas define las filas sin cambios; todo lo demás es una inserción o eliminación
- Diff de Myers (1986): tiempo O((M + N) * D) donde D es la distancia de edición; backend predeterminado en Git, GitHub y la mayoría de vistas de diff de IDEs
- PD ingenua: tiempo y espacio O(M * N) — adecuado para entradas pequeñas pero la memoria cuadrática lo hace impracticable para archivos grandes
- Patience diff: alinea primero las líneas que aparecen de forma única; produce bloques más limpios para secciones movidas o reordenadas
- Formatos de salida: diff unificado con encabezados de bloque @@ -m,n +p,q @@ para CLI; filas coloreadas lado a lado para interfaz web
- Granularidad: los diffs de línea / palabra / carácter aplican el mismo algoritmo a una segmentación diferente de la entrada
- Distancia de Levenshtein: cuenta inserciones + eliminaciones + sustituciones; diff-match-patch es la biblioteca web de referencia
Ejemplos
Detectar un cambio de una palabra dentro de un párrafo
Original:
The server starts on port 3000 by default.
Modificado:
The server starts on port 8080 by default.
Resultado: 1 línea cambiada (3000 -> 8080)Comparar dos versiones de un bloque de configuración
Original: Modificado:
timeout: 30 timeout: 60
retries: 3 retries: 3
debug: false debug: true
log_level: info
Resultado: 2 líneas añadidas, 2 líneas eliminadasDiff de notas de lanzamiento antes y después
Eliminado (rojo):
- Fixed login redirect on Safari 16
Añadido (verde):
- Fixed login redirect on Safari 16 and 17
- Added dark mode preference sync
Resultado: 2 líneas añadidas, 1 línea eliminadaDetectar claves JSON reordenadas
Original: Modificado:
{ "name": "alice", { "id": 1,
"id": 1, "name": "alice",
"role": "admin" } "role": "admin" }
Resultado: 2 líneas cambiadas (orden de claves difiere, valores idénticos)Preguntas frecuentes
¿Qué tipo de diff muestra?
Diff a nivel de línea. La página muestra dos paneles en paralelo: a la izquierda las líneas eliminadas resaltadas en rojo y a la derecha las añadidas en verde. Los números de línea ayudan a localizar los cambios. La barra de estado indica el número de líneas añadidas y eliminadas.
¿Qué algoritmo de diff usa?
La página usa un algoritmo de Subsecuencia Común Más Larga (LCS) para calcular el script de edición a nivel de línea. Para tamaños habituales de documento, se ejecuta en tiempo real mientras escribes. El algoritmo encuentra la secuencia más corta de inserciones y eliminaciones para transformar el texto de la izquierda en el de la derecha.
¿Por qué el diff se ve distinto a git diff?
Git tiene su propia implementación de diff con algoritmos configurables. Esta página usa un diff basado en LCS en JavaScript que se ejecuta íntegramente en el navegador. El formato de salida y los límites de los hunks pueden variar ligeramente respecto a git diff, pero la detección de cambios subyacente es correcta para una comparación de texto a nivel de línea.
¿Puedo hacer diff solo dentro de un párrafo o frase?
Sí: pega cada versión en un lado. La página también ofrece resaltado a nivel de carácter dentro de las líneas modificadas, lo que hace que 'renombrar foo a bar' aparezca como una sustitución en línea en lugar de dos cambios sin relación.
¿Ignora los espacios en blanco?
No. Por defecto, el diff es sensible al espacio en blanco. Las diferencias de espacios (espacios al final, líneas vacías de más, finales de línea distintos) se muestran como cambios.
¿Puedo hacer diff de JSON o XML estructuralmente?
El diff de texto puro va por líneas. Para comparar JSON por clave (la clave 'a' pasa de la posición 1 a la 3 con el mismo valor = sin cambios), usa una herramienta de diff con conocimiento de JSON (jsondiffpatch, json-diff). Esta página es para comparación textual.
¿Se sube mi texto?
No. El diff se ejecuta en tu navegador. Ambas entradas se procesan localmente y no se transmiten.