Las expresiones regulares se utilizan con los métodos RegExp test() y exec() y con los métodos de String, match(), replace(), search() y split(). Estos métodos se explican en detalle en la referencia de JavaScript.
El método exec() ejecuta una busqueda sobre las coincidencias de
una expresión regular en una cadena especifica. Devuelve el resultado
como array, o null.
Si está ejecutando una expresión regular solo
para buscar si algo se cumple o no, usa el método
RegExp.prototype.test() o el método String.prototype.search().
Sintaxis
regexObj.exec(cadena)
Parametros
Valor devuelto
Si se encuentran
coincidencial, el método exec() devuelve un array y actualiza las
propiedades del objecto de la expresión regular. El array devuelto
contiene los elementos encontrados en su primer elemento, y un elemento
por cada parte de la expresión regular que se encuentra entre parentesis
y se encuentra dentro del texto que fué capturado.
Si la busqueda falla, el método exec() devuelve null.
El método test() ejecuta la búsqueda de una ocurrencia entre una
expresión regular y una cadena especificada. Devuelve true o false.
Use
test() cuando desee saber si existe la ocurrencia de un patrón en una
cadena (similar al método String.prototype.search(), la diferencia es
que test() devuelve un booleano, mientras que search() devuelve el
índice de la coincidencia (si la encuentra) o -1 si no la encuentra).
Si requiere más información (a coste de una ejecución más lenta) utilice
el método exec(). Al igual que este último, multiples llamadas a test()
sobre la misma instancia global de una expresión regular avanzará
desde de la ocurrencia anterior.
Sintaxis
regexObj.test(cadena)
Parámetros
Retorna true si existe una coincidencia entre la expresión regular y la cadena especificada; de lo contrario retorna false.
Hasta
ahora siempre hemos empleado el método test que retorna un valor true
si el string cumple el patrón propuesto o false en caso contrario.
La clase RegExp cuenta con otro método llamado exec que retorna un vector con más datos en caso que el string cumpla el patrón propuesto o null si no cumple el patrón. Veamos con un problema que datos extras retorna este vector.
<!DOCTYPE html> <html> <head> <title>Ejemplo de JavaScript</title> <meta charset="UTF-8"> </head> <body> <script> var oracion='saliendo de la casa que esta en la montaña'; var patron1=/la/; var vector1=patron1.exec(oracion); document.write(vector1.index); document.write('<br>'); document.write(vector1.input); document.write('<br>'); var patron2=/lax/; var vector2=patron2.exec(oracion); document.write(vector2); </script> </body> </html>
Hemos definido en la variable oracion el valor : 'saliendo de la casa que esta en la montaña'. El primer patrón de búsqueda es verificar si contiene los caracteres 'la' la oración:
var oracion='saliendo de la casa que esta en la montaña'; var patron1=/la/; var vector1=patron1.exec(oracion);
El método exec retornará un valor distinto a null (tener en cuenta que retorna un vector) ya que la palabra 'la' está contenida en la oración.
El vector devuelto por el método exec tiene dos propiedades llamadas index e input:
La propiedad index almacena la posición dentro del string donde se cumple el patrón, en nuestro ejemplo retorna un 12 que es la posición donde se encuentra la l:
saliendo de la casa que esta en la montaña
La propiedad input almacena la cadena que se está analizando.
La segundo parte del problema define un segundo patrón:
var patron2=/lax/; var vector2=patron2.exec(oracion);
Como no se encuentra en el string la cadena 'lax' el método exec retorna un valor null, es decir no retorna un vector.
El método match() se usa para obtener todas las ocurrencias de una expresión regular dentro de una cadena. Si la expresión regular no incluye el flag g, devuelve el mismo resultado que Regexp.exec(). Si la expresión regular incluye el flag g, el método devuelve un Array que contiene todos los emparejamientos.
Sintaxis
cadena.match(regexp)
Parámetros
El método matchAll() retorna un iterador de todos los resultados de ocurrencia en una cadena de texto contra una expresión regular, incluyendo grupos de captura. Antes de la adición de matchAll a JavaScript, fue posible hacer llamados a regexp.exec (y usar expresiones regulares con la bandera /g) en un ciclo para obtener las ocurrencias.
Sintaxis
cadena.matchAll(expresionRegular)Parámetros
El método search() ejecuta una búsqueda que encaje entre una expresión regular y el objeto String desde el que se llama.
Cuando se desee saber en qué casos un patrón se encuentra en una cadena
de texto utiliza search() (si sólo deseas saber si existe, utiliza el
método test() del prototipo de RegExp); para más información (pero de
ejecución más lenta) utiliza match() (similar al método exec() de las
expresiones regulares).
Sintaxis
str.search(expresionregular)
El índice de la primera coincidencia entre la expresión regular y la cadena de texto proporcionada, si no se encuentra devuelve -1.
El método replace() devuelve una nueva cadena con algunas o todas las coincidencias de un patrón, siendo cada una de estas coincidencias reemplazadas por remplazo. El patrón puede ser una cadena o una RegExp, y el reemplazo puede ser una cadena o una función que será llamada para cada coincidencia. Si el patrón es una cadena, sólo la primera coincidencia será reemplazada.
Este método no cambia el objeto String sobre el que se realiza la llamada. Simplemente devuelve una nueva cadena.
Para
realizar una búsqueda global y reemplazarla, o se incluye el flag g en
la expresión regular o si el primer parámetro es una cadena, se incluye g
en el parámetro flags.
Sintaxis
cadena.replace(regexp|substr, newSubStr|function[, flags]);Parámetros
El método replaceAll() devuelve una nueva cadena con todas las coincidencias de a patternreemplazadas por a replacement. El patternpuede ser una cadena o una RegExp, y la replacementpuede ser una cadena o una función a ser llamados para cada partido.
Sintaxis
newStr = str.replaceAll(regexp|substr, newSubstr|function)Parámetros
El método split() divide un objeto de tipo String en un array
(vector) de cadenas mediante la separación de la cadena en subcadenas,
el método split() devuelve el nuevo array.
Cuando se encuentra, el separador es eliminado de la cadena y las
subcadenas obtenidas se devuelven en un array. Si el separador no es
encontrado o se omite, el array contendrá un único elemento con la
cadena original completa. Si el separador es una cadena vacía la cadena
es convertida en un array de carácteres.
Si el separador es una expresión regular que contiene paréntesis de
captura, entonces cada vez que el separador concuerda, los resultados
(incluído cualquier resultado indefinido) de los paréntesis de captura
son divididos en el array resultante. Sin embargo no todos los
navegadores soportan esta característica.
Sintaxis
cadena.split([separador][,limite])Parámetros
El objeto String tiene métodos que reciben como parámetro una expresión regular.
El primer método es el search. Este método busca la primer ocurrencia del string según la expresión que le hemos pasado como parámetro. Devuelve un entero indicando la posición donde comienza la cadena encontrada o un -1 si no encuentra el patrón en el string.
<!DOCTYPE html> <html> <head> <title>Ejemplo de JavaScript</title> <meta charset="UTF-8"> </head> <body> <script> var oracion='La noche está muy oscura y estrellada.'; if (oracion.search(/estrella/)!=-1) alert('el string estrella está contenido en la variable oracion'); </script> </body> </html>
Hemos dispuesto un if para controlar si el string 'estrella' está contenido en la variable oración:
> if (oracion.search(/estrella/)!=-1) alert('el string estrella está contenido en la variable oracion');
Por supuesto que podemos emplear expresiones regulares tan complejas como necesitemos utilizando distintos metacaracteres y modificadores.
El segundo método del objeto String que veremos es el replace.
El método replace realiza una búsqueda y reemplazo. Se toma una expresión regular como primer parámetro y un string de reemplazo como su segundo argumento. Si la expresión regular tiene la bandera g, el método replace sustituye todas las coincidencias en la cadena de reemplazo, en caso contrario, se reemplaza sólo la primera coincidencia que encuentre.
<!DOCTYPE html> <html> <head> <title>Ejemplo de JavaScript</title> <meta charset="UTF-8"> </head> <body> <script> var oracion='uno dos tres uno dos tres uno dos tres'; var cadena=oracion.replace(/uno/g,'1'); alert(cadena); //1 dos tres 1 dos tres 1 dos tres </script> </body> </html>
En este problema queremos obtener otro String sustituyendo todas las cadenas 'uno' por el caracter '1'. Para hacer que se sustituyan todas las ocurrencias debemos emplear el modificador g:
var cadena=oracion.replace(/uno/g,'1');
Es importante tener en cuenta que la variable que llama al método replace no se modifica, sino que retorna otro String con el resultado.
El tercer método es el split que tiene por objetivo subdividir un string y retornar un vector con dichas partes. Para la división toma en cuenta la expresión regular pasada como parámetro.
<!DOCTYPE html> <html> <head> <title>Ejemplo de JavaScript</title> <meta charset="UTF-8"> </head> <body> <script> var cadena='(2,3)-(4,4)-(9,3)'; var vec=cadena.split(/-/); for(var x=0;x<vec.length;x++) { document.write(vec[x]+'<br>'); } </script> </body> </html>
El vector vec almacena los valores: (2,3) (4,4) y (9,3), ya que la expresión regular indicada define el caracter - como patrón de corte.
El último método a analizar del objeto String es el match. Tiene como parámetro una expresión regular y retorna un vector con todos los string que cumplen el patrón especificado (siempre y cuando hallamos activado la bandera 'g' (global))
ProblemaSe tiene un string donde tenemos almacenados los nombres de personas seguido de sus edades. Generar un vector solo con las edades de todas las personas.
<!DOCTYPE html> <html> <head> <title>Ejemplo de JavaScript</title> <meta charset="UTF-8"> </head> <body> <script> var cadena='juan 10 luis 43 pedro 21 carlos 33'; var vec=cadena.match(/\d+/g); for(var x=0;x<vec.length;x++) { document.write(vec[x]+'<br>'); } </script> </body> </html>