La tarea que me hizo construir esto fue aburrida, y es exactamente por eso que valía la pena automatizarla. Un cliente me entregó una exportación de 4.000 líneas donde cada fecha se escribía al estilo americano 01/15/2024, y el sistema en el que se estaba instalando quería ISO, 2024-01-15. Un simple hallazgo y reemplazo no podía tocarlo, porque no había una cadena fija para buscar; las fechas eran todas diferentes. Lo que compartieron fue un formular: dos dígitos, una barra, dos dígitos, una barra, cuatro dígitos. Ese es precisamente el tipo de cosa que coincide con una expresión normal, y precisamente el tipo de cosa que un reemplazo de expresiones regulares reescribe en una sola pasada. Pegué el archivo en una herramienta de extracción, escribí una expresión y toda la exportación invirtió el formato en menos de un segundo.
Ese es el trabajo gratis Reemplazo de expresiones regulares la herramienta lo hace, y esta guía es la versión larga de cómo usarla bien. Cubriré qué es realmente un reemplazo de expresiones regulares, cómo las referencias posteriores del grupo de captura le permiten reestructurar el texto en lugar de eliminarlo solo, qué significa cada token de reemplazo especial y los errores que hacen tropezar a las personas. Se encuentra al lado del Probador de expresión regular Escribí por separado: el probador le dice qué coincide un patrón y esta herramienta reescribe lo que coincide. Si las expresiones regulares son nuevas para usted, comience con guía completa de herramientas de codificación y vuelve.
TL;Dr: Un reemplazo de expresiones regulares coincide con el texto por patrón y reescribe cada coincidencia usando una cadena de reemplazo. Envuelva las piezas que desea reutilizar entre paréntesis para crear grupos numerados y luego haga referencia a ellas en el reemplazo con
$1,$2, etcétera el patrón(\d{4})-(\d{2})-(\d{2})con reemplazo$3/$2/$1se vuelve2024-01-15hacia el interior de15/01/2024. Enciende elgbandera para reemplazar cada coincidencia, deje el reemplazo vacío para eliminar coincidencias y úselo$<name>para grupos nombrados. El Reemplazo de expresiones regulares la herramienta se ejecuta completamente en su navegador y muestra el recuento de reemplazos en vivo.
¿qué es un reemplazo de expresiones regulares?
Una búsqueda y reemplazo ordinaria funciona en texto literal: escribes la palabra exacta que estás buscando y la palabra exacta que debes colocar en su lugar. Falla en el momento en que lo que quieres cambiar no es una cadena fija sino un patrón: una fecha en cualquiera de cien formas, un número de teléfono, una etiqueta HTML, una ejecución de espacios en blanco final, un nombre de variable que sigue una convención. Una expresión regular describe ese patrón y un reemplazo de expresiones regulares lo empareja con una plantilla que dice cómo se debe reescribir cada coincidencia.
El mecanismo tiene dos mitades. El patrón es una expresión regular con la que el motor escanea su texto y encuentra cada lugar donde ocurre la forma. El reemplazo es una cadena que se sustituye por cada coincidencia. En el caso más simple, el reemplazo es texto sin formato y cada coincidencia se convierte en lo mismo, útil para normalizar, digamos, cada serie de pestañas y espacios en un solo espacio. El caso poderoso es cuando el reemplazo se refiere a partes de lo que coincidió, por lo que la salida se construye a partir de la entrada en lugar de ser una constante fija. Eso es lo que convierte un reemplazo de expresiones regulares de una eliminación y repetición contundentes en una herramienta de reestructuración genuina.
Debajo del capó, el Reemplazo de expresiones regulares la herramienta utiliza JavaScript RegExp motor y el String.prototype.replace método que envían cada navegador y Node.js. Eso importa por una razón práctica: el comportamiento que ve en la herramienta es idéntico al comportamiento que obtendrá si pega el mismo patrón y lo reemplaza en su propio código JavaScript o TypeScript. No hay un sabor separado que aprender y no sorprende cuando pasa de la herramienta scratch a la producción. La sintaxis de reemplazo que acepta la herramienta - $1, $&, $<name> y el resto es la sintaxis exacta que define el estándar, documentada MDN's Cadena.reemplazar referencia.
¿cómo funcionan las referencias anteriores de grupos de captura?
Esta es la idea más útil en el reemplazo de expresiones regulares y vale la pena ralentizarla. Cuando pones parte de un patrón entre paréntesis, creas un capturar grupo. El motor recuerda el texto que coincidía ese grupo y numera los grupos de izquierda a derecha comenzando en uno. En la cadena de reemplazo, $1 significa "inserte lo que sea que haya capturado el primer grupo," $2 el segundo, y así sucesivamente hasta $99.
El ejemplo de la fecha lo hace concreto. El patrón (\d{4})-(\d{2})-(\d{2}) tiene tres grupos: el año de cuatro dígitos, el mes de dos dígitos y el día de dos dígitos. Cuando coincide 2024-01-15, grupa unul se înțelege 2024, el grupo dos aguanta 01, y el grupo tres aguanta 15. Un reemplazo de $3/$2/$1 luego ensambla una nueva cuerda a partir de esas piezas en un orden diferente y con diferentes separadores, produciendo 15/01/2024. No se eliminó ni se volvió a escribir nada: la salida se reconstruye literalmente a partir de los fragmentos capturados. Reordene los tokens, cambie la puntuación entre ellos, envuélvalos en otro texto y habrá reformateado cada fecha del archivo con una expresión.
Los grupos con nombre son la misma idea que las etiquetas legibles. En lugar de contar paréntesis, escribes (?<year>\d{4}) y consulte en el reemplazo como $<year>. Para un patrón con dos o tres grupos, los números están bien, pero una vez que haces malabarismos con cinco o seis, los nombres hacen que tanto el patrón como el reemplazo sean mucho más fáciles de leer y cambiar más adelante. La herramienta admite ambos indistintamente, para que puedas mezclar $1 y $<name> en el mismo reemplazo si lo deseas. Cuando estás ensamblando un patrón por primera vez y aún no estás seguro de qué grupos necesitas, el Constructor de expresiones regulares le ayuda a construirlo pieza por pieza antes de traerlo aquí para ejecutar el reemplazo.
¿qué significan los tokens de reemplazo especiales?
El signo del dólar es especial dentro de una cadena de reemplazo e introduce un pequeño conjunto de tokens más allá de los grupos numerados y con nombre. Conocerlos le evita buscar un patrón más complicado del que necesita.
$& inserta toda la subcadena coincidente. Es lo que desea cuando envuelve o anota coincidencias en lugar de reconstruirlas: un patrón de \b\w+@\w+\.\w+\b con un reemplazo de <$&> coloca corchetes angulares alrededor de cada dirección de correo electrónico sin que tengas que capturar todo en un grupo. $\`` (a backtick) inserts everything *before* the match, and $'(an apostrophe) inserts everything *after* it; these are rarely needed but occasionally exactly right. And because$is special, outputting a literal dollar sign requires doubling it:$$in the replacement produces a single$` en la producción, que importa el día en que se reformatea la moneda.
Hay un modismo de eliminación que vale la pena guardar en la memoria: un reemplazo vacío elimina cada coincidencia. Con el indicador global activado y el campo Reemplazar dejado en blanco, la herramienta elimina cada aparición del patrón del texto. Esa es la forma más limpia de eliminar algo: todas las etiquetas HTML <[^>]+>, cada espacio de seguimiento con +$ en modo multilínea, todos los no dígitos de un número de teléfono con \D. No estás reemplazando con un espacio o un marcador de posición; estás reemplazando con nada y la coincidencia simplemente desaparece.
¿Qué banderas importan para un reemplazo?
Las banderas de una expresión regular cambian la forma en que se aplica, y dos de ellas dominan el trabajo de reemplazo diario. El resto son situacionales pero en ocasiones decisivos.
Bandera global, g, es el que más alternarás. Sin él, JavaScript's replace cambia solo el primero coincide y deja el resto del texto en paz: esto es estándar String.replace comportamiento y sorprende a las personas que esperan un reemplazo total. Girar g encendido y se reescriben todas las coincidencias en el texto. La herramienta se activa de forma predeterminada a global, porque reemplazar todo es lo que la gente quiere decir diecinueve de veinte veces, pero el interruptor está ahí para las veces que realmente quieres tocar solo la primera aparición. La bandera de ignorar caso, i, hace que el patrón coincida independientemente del caso de la letra, por lo que error también partidos Error y ERROR - esencial cuando se normalizan los niveles de registro o se ordena la capitalización inconsistente.
La bandera multilínea, m, cambia lo que anclas ^ y $ media: con él puesto, coinciden con el inicio y el final de cada uno hilada en lugar de todo el texto, que es lo que desea cuando elimina espacios en blanco finales o antepone cada línea. La bandera dotAll, s, permita que el punto coincida con caracteres de nueva línea, para que un patrón pueda abarcar saltos de línea, lo que resulta útil para reescribir bloques de varias líneas. El u (unicode) y y Las banderas (pegajosas) son para casos avanzados: u permite el correcto manejo de personajes fuera del plano básico y de determinadas formas de escape, y y ancla cada intento de partido a la posición exacta después del anterior. La siguiente tabla comparativa resume cuándo cada uno gana su lugar.
| decaer a | Carta | Efecto sobre un reemplazo | Uso Típico |
|---|---|---|---|
| mundial | g |
Reemplace cada partido en lugar de solo el primero | Casi todos los reemplazos |
| Ignorar caso | i |
Coincidencia independientemente del caso de la letra | Normalizar los niveles logarítmicos, ordenar la capitalización |
| Multilínea | m |
^ y $ ancla a cada línea |
Prefijación de líneas, eliminación de espacios finales |
| PuntoTodo | s |
El punto también coincide con las nuevas líneas | Reescritura de bloques multilínea |
| Unicode | u |
Manejo correcto de caracteres astrales y \u{...} |
Emoji, escrituras no latinas |
| Pegajoso | y |
Partido sólo en la posición actual | Tokenizadores, análisis secuencial estricto |
¿cuándo debo usar el reemplazo de expresiones regulares en lugar de un simple búsqueda y reemplazo?
La línea divisoria es simple: use un simple buscar y reemplazar cuando conozca el texto exacto y busque reemplácelo cuando conozca la forma pero no el texto exacto. Si estás cambiando cada 2023 para 2024, un reemplazo ordinario es más rápido y seguro. Si cambia cada año de cuatro dígitos independientemente del valor, solo un patrón puede expresarlo.
Tres familias de tareas caen claramente del lado de la expresión regular. El primero es reformateo, donde el contenido permanece igual pero su disposición cambia: fechas, números de teléfono, nombres escritos "Último, Primero" que quieras como "Primero último." Capture grupos más un reemplazo reordenado maneja todos estos. El segundo es decapado a granel, donde eliminas todo lo que coincida con un patrón (etiquetas, comentarios, caracteres de control, espacios en blanco adicionales) reemplazándolo por nada. El tercero es edición condicional a escala, donde envuelve, antepone o anota cada aparición de un patrón, usando $& para mantener la coincidencia y agregarle más. Cuando la transformación que te estás describiendo contiene la palabra "every" seguido de una descripción en lugar de una cadena literal, estás en territorio de reemplazo de expresiones regulares.
También hay un argumento de flujo de trabajo. Realizar estas ediciones en su editor de código 's buscar y reemplazar funciona, pero edita el archivo en su lugar, lo que significa que un error es un error en su archivo real. Ejecutar la transformación en una herramienta de bloqueo primero le permite ver la salida y el recuento de reemplazos antes de confirmar algo, luego pegar el resultado verificado nuevamente. Porque el Reemplazo de expresiones regulares la herramienta se ejecuta completamente en su navegador y nunca carga lo que pega, es seguro usarla incluso cuando el texto es un registro de producción o una exportación de un cliente, un punto que hago en su totalidad en el guía de privacidad de datos para herramientas en línea.
¿cuáles son los errores comunes con el reemplazo de expresiones regulares?
El más frecuente es olvidar la bandera global y preguntarse por qué sólo cambió el primer partido. Si su reemplazo parece no haber hecho casi nada (una edición en la que esperaba docenas), compruébelo g está encendido. Es un viaje tan común que la herramienta la activa de forma predeterminada, pero en el momento en que la desactivas para apuntar a una sola coincidencia, recuerda devolverla.
El segundo es literal $1 aparece en el resultado donde esperaba que capturara el texto. Eso casi siempre significa que el grupo al que estás haciendo referencia no existe: tu patrón no tiene un primer conjunto de paréntesis, por lo que no hay nada para ello $1 para sustituir y el motor deja el token tal como está. La solución es envolver la pieza que desea reutilizar entre paréntesis para crear el grupo y contar los grupos desde la izquierda comenzando en uno. Una trampa relacionada es contar mal cuando su patrón tiene grupos anidados u opcionales; Cuando la numeración se vuelve confusa, cambie a grupos con nombre para que la referencia sea inequívoca.
El tercer error es un patrón que coincide más de lo que pretendías, generalmente porque un cuantificador es codicioso. Un patrón como <.+> diseñado para coincidir con una etiqueta HTML, coincidirá felizmente desde el primero < al mantenerse > en la línea, tragando todo entre dos etiquetas. La cura es un cuantificador no codicioso <.+?>, o una clase de carácter más precisa, <[^>]+>. Esta es exactamente la situación en la que verifica el patrón en el Probador de expresión regular primero, observe lo que resalta y solo después ejecute el reemplazo, un hábito guía del probador de expresiones regulares camina en detalle. El recuento de reemplazos que se muestra en la herramienta es su otra protección: si informa muchos más o muchos menos reemplazos que la cantidad de cosas que pretendía cambiar, el patrón es incorrecto, no la herramienta.
Un ejemplo trabajado: reformatear nombres y eliminar ruido
Permítanme repasar un pequeño trabajo de un extremo a otro, porque ver las piezas trabajar juntas arregla la idea mejor que cualquier regla. Supongamos que tiene una lista de contactos exportados como Doe, Jane y Smith, John, uno por línea, y los quieres como Jane Doe y John Smith.
La forma de cada línea es: algunos caracteres de palabras, una coma, un espacio, luego más caracteres de palabras. Como patrón que es (\w+), (\w+), con el apellido capturado en el grupo uno y el nombre de pila en el grupo dos. El reemplazo que los intercambia y deja caer la coma es $2 $1 - grupo dos, un espacio, grupo uno. Pegue la lista en el Reemplazo de expresiones regulares herramienta, ingrese ese patrón y reemplazo, deje la bandera global encendida y cada línea cambie a "Primero último" de inmediato. El recuento de reemplazo le indica cuántas líneas se tocaron, lo que puede comparar con el número de contactos.
Ahora diga que la misma exportación tiene espacios en blanco finales en algunas líneas que también desea eliminar. Ese es un segundo reemplazo separado: patrón +$ con la bandera multilínea encendida $ coincide con el final de cada línea y un reemplazo vacío para que los espacios coincidentes se eliminen en lugar de reemplazarse. Ejecute después del intercambio de nombres y el archivo estará limpio. El enfoque de dos pasadas (una de reemplazo para reestructurar y otra para eliminar) es típico, y debido a que cada pasada le muestra su salida y cuenta antes de copiarla, nunca adivina si la transformación hizo lo que quiso decir. Cuando el texto remodelado necesita una diferencia visual final con respecto al original para confirmar que no se movió nada más, pegue ambas versiones en el Diferencia de texto herramienta. Para el kit más amplio de utilidades cotidianas en el que cabe, el Kit de herramientas para desarrolladores web recoge los que más busco.
Preguntas frecuentes
¿Cómo encuentro y reemplazo con una expresión regular en línea? Ingrese su patrón en el campo Buscar sin barras, escriba el reemplazo en el campo Reemplazar, elija sus indicadores y pegue su texto. La salida reescrita aparece instantáneamente y muestra cuántos reemplazos se ejecutaron. Todo sucede en su navegador, por lo que no se carga nada.
¿cómo funcionan las referencias retrospectivas del grupo de captura en el reemplazo?
Los paréntesis en su patrón crean grupos numerados y los reutiliza en el reemplazo con $1, $2, etc. Por ejemplo, el patrón (\d{4})-(\d{2})-(\d{2}) con el reemplazo $3/$2/$1 convierte el 2024-01-15 en 15/01/2024. Grupos nombrados como (?
¿Cómo reemplazo todas las coincidencias en lugar de solo la primera? Habilite el indicador g (global). Sin él, JavaScript reemplaza solo la primera coincidencia, exactamente como se comporta el método String.replace. Con g habilitado, se reemplaza cada coincidencia en el texto, que es lo que necesitan la mayoría de las tareas de reemplazo.
¿Cómo elimino cada coincidencia en lugar de reemplazarla? Deje vacío el campo Reemplazar. Con la bandera global activada, cada coincidencia se elimina del texto. Esta es la forma más limpia de eliminar etiquetas, ejecuciones de espacios en blanco o caracteres no deseados que comparten un patrón.
¿qué significan los tokens especiales $&, backtick y apóstrofe en el reemplazo? $& inserta toda la subcadena coincidente, un backtick inserta el texto antes de la coincidencia y un apóstrofe inserta el texto después. Para generar un signo de dólar literal, escriba $$. Estos siguen la cadena JavaScript estándar.reemplace patrones de reemplazo especiales.
¿qué sabor de expresiones regulares utiliza esta herramienta? Utiliza el motor RegExp JavaScript (ECMAScript) integrado en su navegador, que es idéntico al de Node.js. Los resultados aquí coinciden con el comportamiento del mismo patrón y reemplazo en JavaScript y TypeScript. JavaScript regex se diferencia de PCRE, Python re y Java en algunas funciones avanzadas.
¿por qué mi reemplazo produce un $1 literal en lugar del texto capturado? Un $1 literal en la salida generalmente significa que su patrón no tiene un primer grupo de captura, por lo que no hay nada a lo que hacer referencia $1. Envuelva la parte que desea reutilizar entre paréntesis para crear el grupo y cuente los grupos de izquierda a derecha a partir de 1.
¿es seguro ejecutar el reemplazo de expresiones regulares en datos confidenciales? Sí. Todas las coincidencias y reemplazos ocurren en JavaScript dentro de su navegador, por lo que no se envía ningún patrón, reemplazo o texto a ningún servidor, no se registra nada y la herramienta funciona con su conexión deshabilitada. Puede reformatear de forma segura archivos de registro, datos personales o formatos propietarios.
Esta guía acompaña al gratis Reemplazo de expresiones regulares herramienta en Toolz.dev: sin registro, sin cargas, funciona sin conexión.



