Español

Texto y herramientas cotidianas · Text Toolkit

Por qué una herramienta de búsqueda y reemplazo debe sobrevivir a una expresión regular a medio escribir

· Por qué es importante

buscar y reemplazar expresiones regulares edición de texto

Una expresión regular incompleta junto al texto que permanece sin cambios de forma segura
Ilustración de vector original de ToolAcre

Escribir un patrón es incremental, por lo que un corchete de apertura único es un estado normal; Esta publicación sostiene que proteger la compilación, dejar el texto intacto y ofrecer deshacer son características de corrección, no de pulido.

La herramienta que limpió la casilla en un soporte desequilibrado: cómo una pulsación de tecla puede destruir una hora de limpieza

Un cuadro de búsqueda y reemplazo a menudo contiene trabajo que llevó mucho más tiempo ensamblar que el patrón de búsqueda al lado. Si una expresión incompleta puede pasar por la interfaz, borrar el editor o dejar su estado incierto, la herramienta ha hecho que la entrada de patrones sea más peligrosa que la tarea de limpieza que debía simplificar.

El repositorio no documenta un incidente específico en el que ToolAcre borró una hora de trabajo, por lo que esa historia no puede presentarse como un hecho. El requisito defendible es más fuerte de todos modos: el texto del usuario debe permanecer sin cambios cada vez que falla la compilación del patrón, independientemente de cuánto texto esté presente o cuánto tiempo llevó prepararlo.

El fallo destructivo que debe evitar una herramienta de búsqueda y reemplazo

Las expresiones regulares generalmente no se ingresan con una sola pulsación de tecla perfecta. Una persona escribe un paréntesis de apertura antes del paréntesis de cierre, o inicia una clase de carácter con un paréntesis de apertura antes de agregar sus miembros. Durante esos momentos, el campo contiene un patrón sintácticamente incompleto a pesar de que el proceso de edición se desarrolla con normalidad.

Tratar ese estado temporal como un comportamiento excepcional del usuario produce un editor frágil. La respuesta útil es una retroalimentación local inmediata: mostrar que el patrón actual no se puede compilar, preservar todos los demás campos y dejar que la siguiente pulsación de tecla lo repare. Un error de expresión regular no válido debería describir el borrador actual, no finalizar el flujo de trabajo.

Los patrones incompletos son normales mientras se escribe una expresión regular

ToolAcre enruta cada búsqueda proporcionada por el usuario a través de `compilePattern`. Las búsquedas literales primero escapan de los metacaracteres de expresiones regulares, mientras que el modo Regex utiliza la fuente proporcionada directamente. La compilación ocurre dentro de un bloque `try` y el error devuelve un patrón nulo más una cadena de error en lugar de permitir que la excepción de JavaScript escape a la interfaz.

Ese resultado controla la ruta de reemplazo. Cuando la compilación informa un error, `findReplace` devuelve el texto original, cero reemplazos y el error. No intenta una búsqueda parcial ni una reescritura. Por lo tanto, la protección protege tanto la estabilidad de la interfaz como la integridad de los datos: ningún patrón válido significa que no hay mutación del contenido del editor.

Informar lo que sucedió: por qué un recuento de reemplazos después de cada ejecución es la verificación de cordura más rápida

Un reemplazo exitoso aún puede ser lógicamente incorrecto. Una expresión amplia puede coincidir con más fechas de las previstas, mientras que una opción de mayúsculas y minúsculas o un límite de palabra completa pueden reducir el conjunto a cero. ToolAcre cuenta las coincidencias antes de llamar al reemplazo de cadena estándar y devuelve ese número con el texto reescrito, haciendo que el alcance sea visible después de cada ejecución.

El conteo es una verificación rápida de cordura en lugar de una prueba de que cada coincidencia fue deseable. Si se esperaban doce registros y el resultado dice 1 o 1,200, deténgase e inspeccione el patrón antes de copiar el resultado. Un número preciso convierte una vaga sospecha en una razón concreta para deshacer y revisar la búsqueda.

Deshacer como red de seguridad: cada transformación es reversible, con un límite documentado de cincuenta operaciones

La seguridad de la compilación evita que los patrones no válidos cambien el texto, pero los patrones válidos aún pueden expresar la intención incorrecta. Deshacer cubre esa segunda categoría. Text Toolkit registra las transformaciones para que un reemplazo completo se pueda revertir después de que el recuento de resultados o la salida revele que la búsqueda fue demasiado amplia, demasiado limitada o agrupada incorrectamente.

El límite del historial documentado es de cincuenta operaciones, por lo que deshacer es un búfer de trabajo en lugar de un control de versiones permanente. Úselo para experimentar en pequeños pasos, pero no lo trate como un almacenamiento de archivo. Para material importante, conserve el original por separado y copie el resultado final solo después de revisar tanto el texto como el recuento de reemplazos.

Ejemplo resuelto: crear un patrón de reformateo de fechas carácter por carácter y observar el error aparecer y desaparecer sin perder texto

Considere cambiar las fechas de `2024-01-02` a `02/01/2024`. Habilite Regex y comience con un paréntesis de apertura. En ese instante, el motor del navegador informa una expresión no válida, ToolAcre muestra el mensaje y el texto permanece intacto. Agregue `\d{4}` y el paréntesis de cierre, y el primer año capturado será válido.

Continúe hasta que la búsqueda sea `(\d{4})-(\d{2})-(\d{2})`, luego use `$3/$2/$1` como reemplazo. Las tres capturas reordenan año, mes y día sin volver a escribir cada línea. Ejecute Reemplazar todo, compare el recuento informado con las filas esperadas y deshaga inmediatamente si el texto numérico no relacionado también coincide.

Lo que esto no cubre: problemas de rendimiento de expresiones regulares, como un retroceso catastrófico en entradas enormes

La protección de compilación soluciona los errores de sintaxis, no el tiempo de ejecución de las expresiones válidas. Un patrón puede compilarse exitosamente pero retroceder mucho en una entrada particular. Debido a que el reemplazo se ejecuta en el hilo principal, una expresión patológica aplicada a un documento grande aún puede hacer que la pestaña del navegador no responda aunque no se haya lanzado ninguna excepción.

La herramienta también realiza Reemplazar todo en lugar de recorrer las coincidencias individualmente y no muestra una vista previa de las coincidencias resaltadas antes de la mutación. Esos límites hacen que los datos de prueba limitados y el recuento de reemplazo sean importantes. Valide una expresión desconocida en una pequeña muestra representativa antes de aplicarla a la única copia de un documento grande.

Conclusión: Text Toolkit trata los patrones no válidos como información, no como error, para que puedas experimentar de forma segura.

Un patrón incompleto es información sobre un estado de edición, no evidencia de que el usuario haya fallado. ToolAcre mantiene esa distinción en sus valores de retorno: la compilación puede informar un error sin arrojar, el reemplazo puede informar cero cambios sin tocar la fuente y una operación exitosa puede informar exactamente cuántas coincidencias reescribió.

Ese diseño admite la experimentación sin pretender que las expresiones regulares sean inofensivas. Conserve la entrada en caso de error de compilación, inspeccione los recuentos después del éxito y utilice deshacer cuando un patrón válido sea conceptualmente incorrecto. En conjunto, esos comportamientos hacen que buscar y reemplazar sea lo suficientemente predecible para los usuarios ocasionales de expresiones regulares que necesitan retroalimentación más que un castigo por una expresión a medio escribir.