Command Palette

Search for a command to run...

Métodos test() y exec() en Expresiones Regulares

Aprende a usar test() para verificar si un patrón existe y exec() para extraer información detallada de las coincidencias.

Lectura: 10 min
Nivel: Principiante

TL;DR - Resumen rápido

  • test() devuelve true si el patrón coincide, false en caso contrario
  • exec() devuelve un objeto con detalles de la coincidencia o null
  • El flag global (g) afecta el comportamiento de exec() y lastIndex
  • test() es ideal para validaciones simples
  • exec() es necesario cuando necesitas grupos de captura o múltiples coincidencias

Introducción a test() y exec()

Los métodos test() y exec() son las dos formas principales de ejecutar expresiones regulares en JavaScript. Mientras test() simplemente verifica si existe una coincidencia, exec() devuelve información detallada sobre la coincidencia encontrada, incluyendo los grupos de captura y la posición en el string.

Entender cuándo usar cada método es fundamental para escribir código eficiente y legible. test() es más rápido cuando solo necesitas saber si algo existe, mientras que exec() es necesario cuando necesitas extraer información o trabajar con grupos de captura.

  • test() devuelve un booleano (true o false)
  • exec() devuelve un objeto con detalles o null
  • Ambos métodos usan la propiedad lastIndex para rastrear la posición
  • El comportamiento cambia con el flag global (g)

Elección del método correcto

Usa test() para validaciones simples (como verificar si un email tiene el formato correcto) y exec() cuando necesitas extraer información (como capturar el nombre de usuario de un email).

Método test()

El método test() ejecuta la búsqueda de una coincidencia entre una expresión regular y una cadena de texto especificada. Devuelve true si encuentra una coincidencia y false en caso contrario. Es el método más simple y rápido para verificar patrones.

Sintaxis Básica

La sintaxis es regex.test(string), donde regex es tu expresion regular y string es el texto donde buscaras.

test-basico.js
Loading code...

En este ejemplo, test() verifica si el patron existe en el string. El primer caso devuelve true porque "Hola" contiene "la", mientras que el segundo devuelve false porque "Mundo" no contiene "la".

Validación de Formatos

test() es ideal para validar formatos como emails, números de teléfono o códigos postales.

test-validacion.js
Loading code...

Este ejemplo muestra cómo usar test() para validar diferentes formatos de datos. Cada expresión regular verifica un patrón específico y devuelve true si el formato es correcto.

Método exec()

El método exec() ejecuta una búsqueda de una coincidencia en una cadena de texto. Devuelve un array con información sobre la coincidencia o null si no encuentra ninguna. A diferencia de test(), exec() proporciona detalles como los grupos de captura, el índice de la coincidencia y el string original.

Sintaxis Básica

La sintaxis es regex.exec(string), donde regex es tu expresion regular y string es el texto donde buscaras.

exec-basico.js
Loading code...

En este ejemplo, exec() devuelve un array donde el primer elemento es la coincidencia completa, el segundo elemento es el primer grupo de captura, index es la posición donde empieza la coincidencia, e input es el string original.

Grupos de Captura con exec()

exec() es especialmente útil cuando necesitas extraer múltiples partes de una coincidencia usando grupos de captura.

exec-grupos.js
Loading code...

Este ejemplo muestra cómo exec() extrae diferentes partes de una fecha. Cada grupo de captura (día, mes, año) se devuelve como un elemento separado en el array de resultados.

lastIndex y el flag global

La propiedad lastIndex indica el índice desde el cual se iniciará la próxima búsqueda. Esta propiedad es especialmente importante cuando usas el flag global (g), ya que cada llamada exitosa a test() o exec() actualiza lastIndex.

Comportamiento sin flag global

Sin el flag global, lastIndex siempre es 0 y cada búsqueda empieza desde el inicio del string.

lastindex-sin-global.js
Loading code...

Sin el flag global, lastIndex no cambia entre llamadas. Cada búsqueda comienza desde el inicio del string, por lo que siempre encontrarás la primera coincidencia.

Comportamiento con flag global

Con el flag global, lastIndex avanza después de cada coincidencia, permitiendo encontrar todas las coincidencias en un string.

lastindex-con-global.js
Loading code...

Con el flag global, lastIndex avanza después de cada coincidencia. Cuando exec() ya no encuentra más coincidencias, lastIndex se reinicia a 0.

Advertencia importante sobre lastIndex

Si usas el flag global, recuerda que lastIndex persiste entre llamadas. Si necesitas reiniciar la busqueda, establece regex.lastIndex = 0 manualmente o crea una nueva instancia de RegExp.

Diferencias entre test() y exec()

Entender las diferencias clave entre test() y exec() te ayudará a elegir el método correcto para cada situación.

  • test() devuelve un booleano, exec() devuelve un array o null
  • test() es más rápido cuando solo necesitas verificar existencia
  • exec() proporciona grupos de captura y detalles de la coincidencia
  • test() es ideal para validaciones, exec() para extracción
  • Ambos usan lastIndex, pero exec() lo actualiza con el flag global
comparacion-test-exec.js
Loading code...

Este ejemplo muestra la diferencia práctica entre ambos métodos. test() simplemente verifica si el patrón existe, mientras que exec() extrae la información detallada de la coincidencia.

Casos de Uso Prácticos

Los métodos test() y exec() tienen múltiples aplicaciones prácticas en desarrollo de software, desde validación de formularios hasta extracción de datos de texto.

Validación de Formularios

Usa test() para validar campos de formulario en tiempo real.

caso-uso-validacion-formulario.js
Loading code...

Este ejemplo muestra cómo usar test() para validar diferentes campos de un formulario. Cada campo tiene su propio patrón de validación.

Extraer Datos de Texto

Usa exec() para extraer información específica de texto estructurado.

caso-uso-extraer-datos.js
Loading code...

Este ejemplo muestra cómo usar exec() para extraer componentes de una URL. Cada grupo de captura extrae una parte específica de la URL.

Errores Comunes

Estos son los errores más frecuentes que encontrarás al trabajar con test() y exec(), especialmente cuando estás aprendiendo estos métodos.

No Verificar si exec() Devuelve null

Un error común es asumir que exec() siempre devuelve un array sin verificar si es null.

error-no-verificar-null.js
Loading code...

El error ocurre porque intentamos acceder a match[0] cuando exec() devuelve null. Siempre verifica que el resultado no sea null antes de acceder a sus propiedades.

Olvidar Reiniciar lastIndex

Olvidar reiniciar lastIndex puede causar comportamientos inesperados cuando usas el flag global.

error-lastindex-global.js
Loading code...

El error ocurre porque lastIndex persiste entre llamadas. La segunda busqueda empieza desde donde termino la primera, no desde el inicio. Reinicia lastIndex o crea una nueva instancia de RegExp.

Resumen: Metodos test() y exec()

Conceptos principales:

  • test() devuelve true si el patron coincide, false en caso contrario
  • exec() devuelve un array con detalles de la coincidencia o null
  • lastIndex indica la posicion de la proxima busqueda
  • El flag global (g) afecta el comportamiento de ambos metodos
  • exec() proporciona grupos de captura e informacion detallada

Mejores practicas:

  • Usa test() para validaciones simples y rapidas
  • Usa exec() cuando necesites extraer informacion o grupos de captura
  • Verifica que exec() no devuelva null antes de acceder a sus propiedades
  • Reinicia lastIndex manualmente o crea una nueva instancia de RegExp
  • Usa el flag global solo cuando necesites multiples coincidencias