Reemplazar es más peligroso que igualar

Una búsqueda incorrecta puede perder resultados. Un reemplazo incorrecto puede reescribir todos los registros coincidentes. Defina qué debe coincidir, qué debe capturarse, qué resultado se requiere y qué ejemplos no deben cambiar antes de tocar datos reales.

Capture solo lo que necesita el reemplazo

Opciones de grupo
FeatureUseRisk
(...)Capturar un valorLa numeración cambia cuando se insertan grupos.
(?:...)Grupo sin capturaNo se puede utilizar en reemplazo
(?<name>...)captura con nombreRequiere motor compatible
en patrónCoincidir con el texto capturado anteriormenteConfundido con la sintaxis de reemplazo
$1 en reemplazoInsertar texto capturadoDepende del reemplazo API

Las referencias retrospectivas de patrón y reemplazo difieren

Dentro de una expresión regular JavaScript, coincide con el texto capturado anteriormente. En una cadena de reemplazo, $1 o $ inserta texto capturado. Por lo tanto, reordenar “Último, Primero” requiere capturar campos en el patrón y hacer referencia a ellos en orden inverso en el reemplazo.

Utilice opciones de búsqueda para el contexto

La mirada hacia adelante y hacia atrás afirma el texto circundante sin consumirlo. Pueden hacer coincidir un número solo antes de una unidad, excluir un prefijo protegido o insertar en un límite. Pruebe la compatibilidad con el navegador/tiempo de ejecución cuando los scripts se ejecuten en motores más antiguos.

Las banderas cambian de alcance

  • g reemplaza todas las coincidencias.
  • i cambia la distinción entre mayúsculas y minúsculas.
  • m cambia anclajes de línea.
  • s permite hacer coincidir los terminadores de línea.
  • u habilita el análisis compatible con Unicode.
  • y realiza una coincidencia fija.

Comenzar sin g puede ser un freno de seguridad útil.

Crear una matriz de prueba

PositivePartidos normales

Entradas y salidas esperadas.

NegativeTexto protegido

Entrada similar que no debe cambiar.

BoundaryAristas y puntuación

Inicio/fin y separadores.

UnicodeNombres y símbolos

Acentos, guiones, emoji.

MalformedEntrada incompleta

Faltan delimitadores y campos adicionales.

Scalepeor caso

Casos de fracaso prolongados para dar marcha atrás.

Utilice el probador de expresiones regulares de Jivaro

  1. Abra Regex Tester & Reemplace la herramienta.
  2. Utilice texto de muestra representativo.
  3. Cree expresiones y banderas de forma incremental.
  4. Inspecciona cada partido y grupo.
  5. Agregue reemplazo y revise la vista previa completa.
  6. Cree pruebas de coincidencias requeridas y de no coincidencias requeridas.
  7. Exporte el patrón con suposiciones.
  8. Ejecute una copia y revise una diferencia.

Trampas comunes

Tareas de reemplazo
TaskTrap
Reordenar camposDelimitador dentro de los datos citados
Normalizar espacios en blancoDestruir sangrías o saltos de línea
Cambiar el nombre de los identificadoresCambiar subcadenas dentro de nombres más largos
Convertir fechasRegex no puede probar que todas las fechas del calendario sean válidas
Coincidencia de HTML/URLLas gramáticas complejas requieren analizadores

Rendimiento e implementación

Evite cuantificadores ambiguos anidados que provoquen un retroceso catastrófico. Utilice clases restringidas y pruebe entradas largas que no coincidan. Antes de la implementación, mantenga una copia de seguridad, registre el motor y las banderas, cuente las coincidencias, revise una diferencia y valide los datos transformados con su analizador o pruebas reales.

Utilice funciones de reemplazo para lógica condicional

Una cadena de reemplazo estática es apropiada cuando la salida es una disposición fija de capturas. Cuando la salida depende de la conversión numérica, reglas de casos, validación o grupos opcionales, una devolución de llamada de reemplazo suele ser más clara. La devolución de llamada recibe la coincidencia completa, las capturas, el desplazamiento y la cadena fuente, lo que permite pruebas y código explícito en lugar de una expresión de reemplazo ilegible.

Mantenga la lógica empresarial compleja fuera de la propia expresión regular. Utilice la expresión para localizar y analizar una estructura restringida y luego manejar las decisiones en código ordinario.

Documentar el patrón como un pequeño programa.

Almacene el propósito, el motor, las banderas, la entrada de muestra, la salida esperada, los casos negativos y las limitaciones conocidas junto a la expresión regular. Un patrón sin contexto es difícil de revisar y peligroso de reutilizar. Para las transformaciones de producción, incluya recuentos de coincidencias y una suma de verificación o versión de la entrada/salida para que se pueda auditar el cambio.

Preguntas frecuentes

¿Cuál es la diferencia entre \1 y $1?

\1 es una referencia hacia atrás dentro del patrón; $1 inserta una captura en una cadena de reemplazo JavaScript.

¿Cuándo utilizar grupos que no capturan?

Utilice (?:...) para la agrupación necesaria por alternancia o cuantificadores cuando el valor no se requiera más adelante.

¿Cómo evito reemplazar demasiado?

Utilice límites, pruebas negativas, recuentos de coincidencias, una prueba de primera coincidencia y una diferencia revisable.

¿Cuándo debo utilizar un analizador?

Para datos anidados o basados en gramática, como HTML, JSON arbitrarios, lenguajes de programación y CSV complejos.

Aplicaciones relacionadas Jivaro

Herramientas de desarrolladorProbador de expresiones regulares y herramienta de reemplazo

Prueba expresiones regulares de JavaScript en un worker aislado, inspecciona grupos de captura, previsualiza reemplazos, ejecuta casos de prueba y copia fragmentos para distintos lenguajes localmente.

Abrir aplicación

Fuentes y referencias