Expresiones regulares son patrones que se usan para buscar coincidencias en cadenas de texto. Se componen de un patrón o patrones a buscar y modificadores como cuantificadores que definen la frecuencia de aparición. Existen tres formas de declarar expresiones regulares en JavaScript y el objeto RegExp proporciona métodos como exec(), test(), match() para realizar búsquedas.
2. RegExp Objeto
RegExp es un objeto que describe un patrón de caracteres. Se usa para
simplificar código y no tener que implementar demasiadas comprobaciones.
Sintaxis:
Ejemplo de expresión regular completa:
Una expresión regular se compone de:
Patrón o patrones, será la expresión que sea buscada al ejecutar la expresión regular.
Modificadores, se utilizan para hacer búsquedas globales o insensibles a mayúsculas y
minúsculas.
3. Distintas formas de declarar expresión
regular en JavaScript
var patron = /hola/;
patron.test("hola");
-->Declaración de un patrón
var regExp = new RegExp(/hola/);
regExp.test('hola');
-->Declaración correcta del objeto RegExp. Da acceso a métodos exclusivos de
RegExp.
var cadena = "hola";
/hola/.test(cadena);
--> No es una declaración porque se borraría el contenido
4. RegExp Creación de patrones
Web para probar expresiones regulares: https://regexr.com/
Letras:
. Un carácter sea el que sea Ejemplo: .an = pan lan wan
[a-z] Un carácter en minúscula o [A-Z] en mayúsculas
[A-Za-z] mayúsculas y minúsculas
[A-Za-záéíóúñÁÉÍÓÚÑ] así sería un carácter que admita acentos y la ñ
w+ detecta una palabra entera sin espacios
Números:
[0-9] un dígito entre 0 y 9
d un dígito dd dos dígitos juntos
Caracteres especiales:
(carácter especial) Ejemplo: * o bien,
Unicodes: u00A9
Espacios en blanco: s
Tab t , salto de línea n , retorno de carro r
5. RegEx. Modificadores del patrón
El punto “.”
El punto se convierte en cualquier carácter, es decir si ponemos la palabra .an , el punto
podrá ser cualquier letra, saldrían palabras tipo: Pan,Can,Lan…etc. Si deseamos que el
Punto haga función de punto debemos ponerlo así: .
La barra invertida o diagonal invertida “”
Convierte los meta-caracteres a caracteres, es decir, con su significado literal: “.” Esto se
suele usar para buscar IPs, por ejemplo si estamos buscando la IP 198.163.1.1 --
> 198.163.1.1
Corchetes []
Los corchetes los utilizamos para agrupar una serie de caracteres con los que puede
coincidir la búsqueda, el ejemplo más sencillo son las mayúsculas y las minúsculas
[Rr]oberto.
Para que coincida con palabras, debemos añadir el meta-carácter de alternancia “|” entre
ellas es decir [perro|casa|coche].
6. RegEx. Modificadores del patrón III
Anchor ^ $
El símbolo ^ obliga a GA a empezar la búsqueda por el término que le definamos es
decir ^Developer todo lo que encuentre deberá empezar por esa palabra. Si el
símbolo ^ se encuentra dentro de corchetes [] como por ejemplo [^0-9] significa NO,
en este caso no nos mostrará ningún número.
El símbolo $ se utiliza para indicar como termina una línea es decir Developer$ lo
que encuentre tendrá como final la palabra indicada.
Ejemplo: /^hola/ -->Un texto empieza por hola o simplemente contiene hola.
/adiós$/ -->Un texto termina con la palabra adiós
/^contraseña$/ --> Un texto empieza y termina por la palabra contraseña
7. RegEx. Modificadores del patrón II
Repetición ?+*{}
Estos símbolos (interrogación, más, asterisco, llaves) nos permiten definir cuantas veces se va a repetir
o va a aparecer el símbolo anterior.
El “+” indica uno o más para el carácter anterior. Con el ejemplo anterior sería 123* = 123 o 1233 o
12333 o 12333…. Etc. Pero nunca 12 como en el anterior.
El asterisco “*” es una mezcla de los dos anteriores, es decir cero, uno o más. Por ejemplo: 123* nos
mostraría 12 o 123 o 1233 o 12333…. Etc.
Las llaves “{}” se utilizan para repetir un número exacto de veces. Un ejemplo sería [0-9]{5} Esto
significa, en el rango 0-9 nos coja los grupos de 5 dígitos 23451 o 12345 o 98760 por ejemplo.
Agrupar () |
Los paréntesis nos permiten agrupar caracteres.
La barra vertical es lo mismo que decir “o” en una lista: Queremos que GA nos
encuentre casa|coche|perro es decir casa o coche o perro.
8. RegExp. Escapes de carácter
La barra diagonal inversa () en una expresión regular indica una de las
siguientes situaciones:
El carácter que va detrás es especial. Unicodes u00E0 (á), delimitadores b
(espacios en blanco), caracteres t (tabulación)
Caracteres literales Expresión regular: { ... } = Resultado: {…}
Algunos caracteres especiales serían:
•
Espaci
os en
blanco
tabul
ación
retorno
de carro
Tab
vertica
l
avance
de
página
nueva
línea
Escape Octal Hexad
ecimal
Ctrl+c UTF-16
* ?
a b t r v f n e nnn x nn c X u nn
nn
*
x2A
u0007 u0008 u000
9
u000D u000B u000C u000A u001B 040 2 cC
9. RegExp. Escapes de Carácter II
Agrupación de caracteres [primerCarácter-últimoCarácter] Ejemplo: [a-z]
Grupo de caracteres negativos [^] Ejemplo: [^(1|2|3|4|5|6|7)] Que no sea 1,2,3,4,5,6 o
7
El patrón se inicia con ^ y se termina con $ Ejemplo: ^hola (la palabra empieza con hola)
^hola$ (la palabra empieza y termina buscando sólo hola, si tiene algo más lo descarta)
Cualquier carácter .
Carácter de palabra w = [a-zA-Z_0-9]
Carácter que no se usa en las palabras W
Carácter de espacio en blanco s
Carácter que no sea espacio en blanco S
Carácter de dígito decimal d
Carácter que no sea dígito decimal D
Límite palabra o del texto definido por b Ejemplo: yb el texto finalizará con y
10. RegExp. Cuantificadores
Con ellos se determinan la cantidad de veces que aparece un determinado
patrón en la expresión regular.
* 0 o más coincidencias con el patrón
+ 1 o más coincidencias
? 1 o ninguna coincidencia
{n} una cantidad n de coincidencias
{min,} cantidad mínima de repeticiones
{min,max} una cantidad mínima de min hasta max coincidencias
(hola) paréntesis de captura, se usan para aplicarle algún modificador
(hola)1 = 123123 Se repite un bloque almacenado entre paréntesis
(hola)* = holaholaholahola Se repite hasta que identifique un espacio o un
carácter que no coincida con el patrón
(hola)+ = hola hola hola Identifica todas las palabras que cumplan con ese
patrón
11. RegExp Usos.
Se usan para ahorrarse complicadas comprobaciones algorítmicas algunos usos
serían:
DNI: (d){8}[TRWAGMYFPDXBNJZSQVHLCKEtrwagyfpdxbnjzsqvhlcke]
Email: (W|^)[w.+-]{0,25}@(yahoo|hotmail|gmail).com(W|$)
IP: 192.168.1.d{1,3}
Password: ^(?=.*d)(?=.*[!-u002bu003c-u0040])(?=.*[A-Z])(?=.*[a-z])S{8,16}$
Páginas web /^www.w+.w+$/gi
Matrículas ([A-Z]{1,2})(d{4})([A-Z]{0,2})
Número de teléfono móvil: [6-7](d){2}-?(d){2}-?(d){2}-?(d){2}
Introducir sólo números o letras ^[a-zA-Z]*$ (letras) ^d*$ (numeros)
Introducir números y letras w+
12. RegEx. Prototype object
Representa el objeto prototype de la clase RegEx.
La cual posee diversos métodos asociados:
RegExp.prototype.exec()
Ejecuta una búsqueda de una coincidencia en su parámetro de cadena
RegExp.prototype.test()
Prueba una coincidencia en su parámetro de cadena.
RegExp.prototype[@@match]()
Realiza la coincidencia con una cadena dada y devuelve el resultado del emparejamiento.
RegExp.prototype[@@replace]()
Reemplaza las coincidencias en cadena dada con nueva subcadena.
RegExp.prototype[@@search]()
Busca la coincidencia en una cadena dada y devuelve el índice del patrón encontrado en la
cadena.
RegExp.prototype[@@split]()
Divide cadena dada en una matriz separando la cadena en subcadena.
RegExp.prototype.toString()
Devuelve una cadena que representa el objeto especificado. Anula
el Object.prototype.toString()método.
13. RegEx. Funciones asociadas.
replace() match()
'abc'.replace(/a/, 'A');
/a/[Symbol.replace]('abc', 'A');
var re = /-/g;
var str = '2016-01-01';
var newstr = re[Symbol.replace](str,
'.');
console.log(newstr); // 2016.01.01
'abc'.match(/a/);
/a/[Symbol.match]('abc');
var re = /[0-9]+/g;
var str = '2016-01-02';
var result = re[Symbol.match](str);
console.log(result); // ["2016", "01", "02"]
14. RegEx. Search() toString()
'abc'.search(/a/);
/a/[Symbol.search]('abc');
var re = /-/g;
var str = '2016-01-02';
var result =
re[Symbol.search](str);
console.log(result); // 4
var patt = new RegExp("Hello World", "g");
var res = patt.toString();
Resultado:
/Hello World/g
15. RegEx. Exec()
var myRe = /ab*/g;
var str = 'abbcdefabh';
var myArray;
while ((myArray =
myRe.exec(str)) !== null) {
var msg = 'Found '
+ myArray[0] + '. ';
msg += 'Next match starts at
' + myRe.lastIndex;
console.log(msg);
}
Resultado:
Found abb. Next match starts at 3
Found ab. Next match starts at 9
Se usa cuando el patrón se repite
varias veces, éste se almacena en
un array que se va recorriendo y
cada vez que encuentra una se
muestra.
16. RegEx. Split() test()
'a-b-c'.split(/-/);
/-/[Symbol.split]('a-b-c');
var re = /-/g;
var str = '2016-01-02';
var result =
re[Symbol.split](str);
console.log(result); //
["2016", "01", "02"]
Se usa para trocear una
cadena y generar así
un array.
var regexObj = /ab*/g;
var cadena = 'abbcdefabh';
regexObj.test(cadena);
//true si contiene el patrón
//false si no lo contiene