Texto y herramientas cotidianas · Text Toolkit
Por qué ^ y $ coinciden solo una vez: las banderas de expresiones regulares en el navegador buscan y reemplazan
· Cómo funciona
expresiones regulares buscar y reemplazar limpieza de texto
Explica los indicadores de expresiones regulares de JavaScript (global, multilínea y dotAll) y por qué un cuadro de búsqueda y reemplazo compilado sin anclajes multilínea ^ y $ para todo el texto, con patrones que funcionan en su lugar.
El patrón que solo arregló la primera línea: ¿qué sucede cuando esperas que ^ signifique 'inicio de cada línea'?
Una lista pegada puede contener el mismo prefijo no deseado en cada fila, pero la búsqueda de `^prefix` lo elimina solo de la primera fila. El resultado sorprendente proviene de la configuración del patrón, no de datos inconsistentes. En ToolAcre, `^` identifica el inicio del texto completo porque la expresión regular se compila sin modo multilínea.
El ancla `$` correspondiente sigue la misma regla en el otro borde: identifica el final del texto completo, no cada línea que termina dentro de él. Un salto de línea sigue siendo parte de la entrada, pero no se convierte en otra posición de anclaje. Verifique el recuento de reemplazos informado antes de importar la lista limpia; una cuenta de uno expone la falta de coincidencia inmediatamente.
La bandera g: por qué 'reemplazar cada coincidencia en una sola pasada' depende de la bandera global que se establezca
ToolAcre siempre construye su patrón de búsqueda con el indicador global `g`. Esa elección le dice a JavaScript que recopile todas las coincidencias que no se superpongan en lugar de detenerse después de la primera. La herramienta primero llama a `match` para determinar el recuento, luego pasa el mismo patrón global a `replace`, de modo que el número mostrado y el pase de reemplazo usan una regla coincidente.
La coincidencia global no puede crear posiciones que el patrón no reconoce. Con `^prefix`, solo hay un inicio de texto completo elegible, por lo que `g` todavía encuentra una coincidencia. Con un patrón que puede ocurrir en varias filas, `g` permite reemplazar todas las apariciones. Separe estas preguntas al depurar: los anclajes deciden dónde puede comenzar una coincidencia, mientras que el modo global decide si la búsqueda continúa.
El indicador m: cómo las líneas múltiples cambian ^ y $ de anclajes de texto completo a anclajes de línea, y por qué esta herramienta lo omite
El indicador multilínea `m` cambia la forma en que se interpretan `^` y `$`, lo que les permite reconocer posiciones alrededor de los terminadores de línea, así como los límites exteriores del texto. ToolAcre no agrega esa bandera. Su compilador utiliza `g` para búsquedas que distinguen entre mayúsculas y minúsculas y `gi` cuando se borra la distinción entre mayúsculas y minúsculas, sin control del usuario para indicadores adicionales.
Dejar varias líneas no disponibles mantiene la interfaz pequeña, pero significa que los patrones copiados de un editor configurado con `gm` pueden comportarse de manera diferente aquí. No asuma que una expresión familiar lleva consigo sus banderas. Las letras de las banderas de JavaScript se proporcionan cuando se crea RegExp y esta herramienta rechaza la sintaxis de las banderas en línea no admitidas en lugar de habilitar silenciosamente otro modo.
La bandera s: por qué un punto no coincide con una nueva línea de forma predeterminada y cómo hacer coincidir líneas sin él
Un punto en esta herramienta no coincide con un salto de línea porque el compilador también omite el indicador dotAll `s`. Un patrón como `BEGIN.*END` puede coincidir cuando ambos marcadores están en una línea, pero se detiene en el primer salto de línea cuando los marcadores abarcan varias filas. Agregar el modo global no altera lo que el propio punto puede consumir.
Cuando realmente se requiere una coincidencia entre líneas, escriba los caracteres permitidos explícitamente. Una clase como `[\s\S]*?` puede abarcar espacios en blanco y no espacios en blanco sin dejar de ser renuente, aunque los patrones amplios merecen probarse primero en una muestra pequeña. El compilador detecta una sintaxis no válida, pero no protege la pestaña de una expresión costosa con un comportamiento severo de retroceso.
Coincidencia de nuevas líneas explícitamente: usar \n en el patrón para apuntar a los inicios y finales de las líneas cuando las líneas múltiples no están disponibles
Para inicios de línea repetidos sin modo multilínea, haga coincidir el comienzo del texto o una nueva línea: `(^|\n)prefix`. La primera alternativa maneja la primera fila y la segunda maneja las filas posteriores consumiendo su nueva línea anterior. Los paréntesis capturan cualquier límite que coincida, lo que le da al reemplazo una forma de retener la estructura que separaba las líneas.
Esta técnica supone separadores de avance de línea en el patrón. La biblioteca de texto reconoce CRLF, LF y CR solitario cuando realiza operaciones de línea dedicada, pero buscar y reemplazar busca la cadena original directamente. Si el contenido pegado utiliza otra forma de final de línea, normalícelo primero o adapte la expresión deliberadamente; de lo contrario, las filas posteriores pueden permanecer intactas aunque parezcan idénticas en la pantalla.
Haga coincidir los límites de la línea explícitamente con (^|\n) y conserve el separador capturado
Supongamos que la entrada es `ID: apple`, `ID: pear` y `ID: plum` en líneas separadas. Habilite Regex, busque `(^|\n)ID: ` y reemplácelo con `$1`. En la primera fila, `$1` es la posición inicial vacía; en filas posteriores, es la nueva línea capturada. Las etiquetas desaparecen mientras los límites de las tres filas permanecen en su lugar.
Lea el recuento de reemplazos antes de aceptar el resultado. Tres filas deberían producir tres reemplazos en este ejemplo. Si el recuento es uno, inspeccione el patrón real y los finales de línea en lugar de repetir la operación. Deshacer está disponible después de un reemplazo, por lo que una pequeña prueba puede confirmar tanto la coincidencia como la reconstrucción antes de que la misma expresión toque una lista de importación más larga.
Lo que esto no cubre: los indicadores u, i e y, y la inserción de nuevas líneas en el reemplazo, algo que un campo de una sola línea no puede hacer.
La implementación también usa `i` cuando la distinción entre mayúsculas y minúsculas está desactivada, pero no expone ningún control para `u`, `y`, `m` o `s`. Este artículo no asigna comportamiento a esos modos no disponibles más allá de explicar los efectos multilínea y dotAll faltantes necesarios para el ejemplo. Los patrones de otro entorno JavaScript deben revisarse con las banderas que ToolAcre realmente compila.
La fuente demuestra que el texto de reemplazo se pasa a JavaScript `String.replace`, por lo que sustituciones como `$1`, `$&` y `$$` conservan sus significados de JavaScript. No establece todas las interacciones ofrecidas por el campo renderizado a partir de los archivos utilizados aquí. En particular, la inserción de nuevas líneas físicas a través de la interfaz debe probarse en lugar de inferirse únicamente del esquema.
Otros indicadores y comportamiento de campo de reemplazo están fuera de la implementación de esta herramienta
Trate las banderas como parte de una expresión regular, incluso cuando una interfaz muestra solo el cuerpo del patrón. En ToolAcre, cada búsqueda es global, el modo opcional que no distingue entre mayúsculas y minúsculas agrega `i`, y multiline y dotAll están ausentes. Esos hechos explican por qué el reemplazo continúa en coincidencias normales, mientras que `^`, `$` y dot conservan sus restricciones predeterminadas de texto completo y de una sola línea.
Para una lista pegada con prefijo, `(^|\n)prefix` con `$1` es la solución práctica porque nombra el límite y lo preserva. Comience con filas representativas, confirme el recuento, inspeccione la estructura de líneas resultante y solo entonces procese el conjunto de datos completo. Ese procedimiento convierte un resultado desconcertante de una coincidencia en un paso de limpieza revisable antes de la importación.