HOWTO · JavaScript
Equivalentes de JavaScript a `preg_match()` de PHP
En este artículo vamos a aprender cuál es el propósito de la función preg_match y cuál es la forma posible de implementar la misma funcionalidad en JavaScript con un ejemplo.
En esta página
Quienes buscan preg_match() en JavaScript suelen querer comprobar si una cadena coincide con una expresión regular o recuperar el texto coincidente. JavaScript no incluye una función llamada preg_match(); usa RegExp.prototype.test() para obtener un resultado de sí o no y String.prototype.match() cuando necesites los detalles de la coincidencia. La opción adecuada depende de lo que deba hacer tu código a continuación.
Cómo funciona preg_match() en PHP
En PHP, preg_match() recibe un patrón y una cadena de entrada; opcionalmente, puede colocar los datos de la coincidencia en un tercer argumento: preg_match($pattern, $subject, $matches).
El valor devuelto no es simplemente un booleano: es 1 cuando el patrón coincide, 0 cuando no coincide y false si se produce un error. El argumento opcional $matches recibe el texto capturado cuando hay una coincidencia. Esta distinción importa al adaptar una condición: test() en JavaScript devuelve un booleano, mientras que match() devuelve los datos de la coincidencia o null.
Elige una alternativa de JavaScript: test() o match()
JavaScript no tiene una función preg_match() equivalente directa. Tanto test() como match() usan expresiones regulares de JavaScript, pero responden a preguntas distintas. Elige test() si el código posterior solo necesita saber si el patrón aparece. Elige match() si necesita la subcadena coincidente, los grupos de captura o la posición de la coincidencia. Para una comprobación de sí o no como la de PHP, usa test(); para obtener los datos del argumento opcional $matches, usa match() y ten en cuenta que devuelve un resultado con una forma distinta.
Usa test() para comprobar si hay coincidencia
Llama a test() en una expresión regular y pásale la cadena que quieres examinar. Devuelve true si la expresión coincide con alguna parte de la cadena y false en caso contrario. Este ejemplo comprueba si el texto contiene la palabra hello:
Ejecuta este ejemplo:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
const pattern = /hello/;
const text = "hello world";
console.log(pattern.test(text));
true
En la ejecución suministrada, este ejemplo imprimió true. Para comprobar el resultado contrario, prueba con una cadena que no contenga hello; según la semántica de test() en JavaScript, la llamada devuelve false. Esto resulta útil para una condición de validación, pero el patrón debe expresar el formato completo que quieres validar. Por ejemplo, un patrón que solo encuentra dígitos no demuestra que toda la entrada contenga únicamente dígitos; usa anclas cuando deba coincidir la cadena completa.
Usa match() para recuperar coincidencias
Llama a match() en la cadena y pásale una expresión regular. Con una expresión regular que no tenga la bandera g, si hay una coincidencia, se devuelve una matriz cuyo primer elemento es la coincidencia completa; los grupos de captura y propiedades como index proporcionan información adicional. Si no se encuentra ninguna coincidencia, el resultado es null; comprueba si es null antes de leer las propiedades de la matriz.
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
const text = "Order 42 is ready";
const result = text.match(/Order (\d+)/);
if (result !== null) {
console.log(result[0]);
console.log(result[1]);
console.log(result.index);
} else {
console.log("No match");
}
Order 42
42
0
En la ejecución suministrada, este ejemplo imprimió la coincidencia completa Order 42, los dígitos capturados 42 y el índice inicial 0. Cuando el patrón no coincide, result es null y se ejecuta la rama alternativa. A diferencia del argumento opcional $matches de PHP, JavaScript devuelve el resultado directamente de la llamada al método.
Maneja las banderas y los errores comunes
Las banderas de las expresiones regulares de JavaScript modifican el comportamiento de las coincidencias. De forma predeterminada, se distingue entre mayúsculas y minúsculas; añade i para ignorar esa diferencia, como en /hello/i. La bandera g cambia la forma del resultado de match(): text.match(/\d+/g) devuelve una matriz con todas las cadenas de dígitos coincidentes, o null si no hay ninguna. En esta forma global, el resultado no incluye el index de cada coincidencia ni los detalles de los grupos de captura que proporciona una llamada no global a match(). Usa una expresión no global cuando necesites los grupos de captura y la posición de una coincidencia concreta.
Ten cuidado al reutilizar con test() una expresión regular que tenga las banderas g o y: estas expresiones conservan una posición lastIndex, por lo que las llamadas repetidas pueden alternar sus resultados a medida que avanza la posición de búsqueda. Para una comprobación independiente de sí o no, omite esas banderas con estado o restablece lastIndex antes de cada comprobación. Recuerda también que caracteres como ., * y ? tienen un significado especial en un patrón. Escápalos con una barra invertida si quieres que representen el carácter literal y usa anclas como ^ y $ cuando deba coincidir toda la cadena, en vez de solo una subcadena.