Escribir un patrón de expresión regular con JavaScript

 

Un patrón de expresiones regulares está compuesto de caracteres simples, como /abc/; o una combinación de caracteres simples y especiales, como /ab*c/ o /Capítulo (\d+)\.\d*/. El último ejemplo incluye paréntesis, los cuales se usan como un dispositivo de memoria. La coincidencia con esta parte del patrón se recuerda para un uso posterior, como se describe en Usar coincidencias de subcadenas parentizadas.

Usar patrones simples

Los patrones simples se construyen con caracteres para los cuales se busca una coincidencia directa. Por ejemplo: /abc/ coincide con las combinaciones de caracteres en cadenas solamente cuando exactamente los caracteres 'abc' aparecen juntos y en ese orden. Una coincidencia se encontraría en las cadenas "Hi, do you know your abc's?" y "The latest airplane designs evolved from slabcraft." En ambos casos la coincidencia es con la subcadena 'abc'. No hay coincidencia con la cadena "Grab crab" porque no contiene la subcadena 'abc'.

Usar caracteres especiales

Cuando la búsqueda de una coincidencia requiere más que una coincidencia directa, como la búsqueda de una o más bes, o buscar un espacio en blanco, el patrón incluye caracteres especiales. Por ejemplo, el patrón /ab*c/ coincide con cualquier combinación de caracteres en la que una única 'a' seguida de cero o más 'b' (* significa 0 o más ocurrencias del elemento que le precede) e inmediatamente seguido de una 'c'. En la cadena "cbbabbbbcdebc," el patrón coincide con la subcadena 'abbbbc'.

La siguiente tabla muestra una lista completa de los caracteres especiales que pueden ser empleados en expresiones regulares.

 

Caracter Significado
\ Alguno de los siguientes:
  • Para caracteres que generalmente son tratados como literales, indica que el siguiente caracter es un caracter especial y no debe ser interpretado como un literal. Por ejemplo, /b/ coincide con el caracter 'b'. Sin embargo, colocando una barra invertida (backslash) antes de la b, usando así /\b/, el carácter se convierte en especial significando un límite de palabra.
  • Para caracteres que generalmente son tratados como especiales, indica que el siguiente caracter no es especial y debería ser interpretado como un literal. Por ejemplo, * es un caracter especial que significa 0 o más ocurrencias del elemento que le precede; por ejemplo, /a*/ significa cero o más aes. Para encontrar un * literalmente, hay que precederlo de una barra invertida; por ejemplo, /a\*/ coincide con 'a*'.
^ Coincide al principio de la entrada. Si la bandera multilínea es configurada como verdadera, también coincide inmediatamente después de un caracter de salto de línea. Por ejemplo, /^U/ no coincide con la 'U' en "una U", pero sí coincide con la primera 'U' en "Una U".
$ Coincide al final de la entrada. Si la bandera multilínea es configurada como verdadera, también coincide inmediatamente antes de un caracter de salto de línea. Por ejemplo, /t$/ no coincide con la 't' en "eater", pero sí lo hace en "eat".
* Coincide con el caracter que le precede 0 o más veces. Por ejemplo, /bo*/ coicide con 'boooo' en "A ghost booooed" y 'b' en "A bird warbled", pero no en "A goat grunted".
+ Coincide con el caracter que lo precede 1 o más veces. equivalente a {1,}. Por ejemplo, /a+/ coincide con la 'a' en "candy" y todas las aes en "caaaaaaandy".
? Coincide con el caracter que lo precede 0 o 1 vez.

Por ejemplo, /e?le?/ coincide con 'el' en "angel" y con 'le' en "angle."

Si se utiliza inmediatamente después de alguno de los cuantificadores *, +, ?, o {}, transforma el cuantificador en no codicioso (coincidiendo con el mínimo número de elementos posibles), en contraposición al funcionamiento por defecto, en el que se comportan de forma codiciosa (concordando con el máximo número de elementos posibles).

También utilizado en las instrucciones predictivas lookahead assertions, descritas como x(?=y) y x(?!y) más abajo en esta tabla.

. (El punto decimal) coincide con cualquier caracter simple excepto con el de nueva línea. Por ejemplo, /.n/ coincide con 'an' y con 'on' en "nay, an apple is on the tree", pero no con 'nay'.
(x) coincide con 'x' y recuerda la coincidencia. Son llamados paréntesis con memoria capturing parentheses. Por ejemplo, /(foo)/ coincide y recuerda 'foo' en "foo bar." La subcadena coincidente puede ser rellamada usando el vector de elementos resultante 1, ..., n.
(?:x) Coincide con 'x' pero no recuerda la coincidencia. Son llamados paréntesis sin memoria non-capturing parentheses. La subcadena coincidente no puede ser rellamada usando el vector de elementos resultante 1, ..., n.
x(?=y) Coincide con 'x' solo si 'x' está seguida de 'y'. Por ejemplo, /Jack(?=Sprat)/ coincide con 'Jack' sólo si es seguido de 'Sprat'. /Jack(?=Sprat|Frost)/ coincide con 'Jack' sólo si es seguido de 'Sprat' o 'Frost'. Sin embargo, ni 'Sprat' ni 'Frost' forman parte de la coincidencia resultante.
x(?!y) Coincide con 'x' sólo si 'x' no está seguida de 'y'. Por ejemplo, /\d+(?!\.)/ coincide con un número sólo si este no está seguido de un punto decimal. La expresión regular /\d+(?!\.)/.exec("3.141") coincide con 141 pero no con 3.141.
x|y Coincide con 'x' o 'y'. Por ejemplo, /green|red/ coincide con 'green' en "green apple" y 'red' en "red apple."
{n} Donde n es un entero positivo. Coincide exactamente con n ocurrencias del caracter que lo precede. Por ejemplo, /a{2}/ no coincide con la 'a' en "candy," pero si coincide con todas las aes en "caandy," y las primeras dos aes en "caaandy."
{n,} Donde n es un entero positivo. Coincide con al menos n ocurrencias del caracter que le precede. Por ejemplo, /a{2,} no coincide con la 'a' en "candy", Pero coincide con todas las aes en "caandy" y en "caaaaaaandy."
{n,m} Donde n y m son enteros positivos. Coincide con al menos n ocurrencias y como mucho con m del caracter que le precede. Por ejemplo, /a{1,3}/ no coincide con nada en "cndy", pero sí con la 'a' en "candy," las primeras dos aes en "caandy," y las primeras tres aes en "caaaaaaandy". Nótese que al buscar coincidencia con "caaaaaaandy", la coincidencia es "aaa", a pesar de que la cadena original tuviese más aes.
xyz Un conjunto de caracteres. Coincide con cualquiera de los caracteres que están entre corchetes. Puede especificar un rango de caracteres usando un guón. Por ejemplo, abcd es lo mismo que a-d. Esto debería coincidir con la 'b' en "brisket" y la 'c' en "ache".
^xyz Un conjunto de caracteres complementado o negado. Coincide con cualquier cosa que no esté encerrada entre los corchetes. Puede especificar un rango de caracteres usando un guión. Por ejemplo, ^abc es lo mismo que ^a-c. Inicialmente coincidiría con 'r' en "brisket" y la 'h' en "chop."
\\b Coincide con el carácter de retroceso (backspace). (No confundir con \b.)
\b Coincide con un límite de palabra, como el espacio o el carácter de nueva línea. (No confundir con \\b.) Por ejemplo, /\bn\w/ coincide con 'no' en "noonday";/\wy\b/ coincide con 'ly' en "possibly yesterday."
\B Coincide con un caracter que no sea límite de palabra. Por ejemplo, /\w\Bn/ coincide con 'on' en "noonday", y /y\B\w/ coincide con 'ye' en "possibly yesterday."
\cX Donde X es un caracter de control. Coincide con un caracter de control en una cadena. Por ejemplo, /\cM/ coincide con control-M en una cadena.
\d Coincide con un dígito. Es equivalente a 0-9. Por ejemplo, /\d/ o /0-9/ coincide con '2' en "B2 is the suite number."
\D Coincide con un caracter que no sea un dígito. Es equivalente a ^0-9. Por ejemplo, /\D/ o /^0-9/ coinciden con 'B' en "B2 is the suite number."
\f Coincide con un avance de forma form-feed.
\n Coincide con un avance de línea linefeed.
\r Coincide con un retorno de carro.
\s Coincide con un único caracter de espaciado, incluyendo el espacio, tabulado, form feed, line feed. es equivalente a \\f\\n\\r\\t\\v\\u00A0\\u2028\\u2029. Por ejemplo, /\s\w*/ coincide con ' bar' en "foo bar."
\S Coincide con un único caracter que no sea de espaciado. Es equivalente a

^ \\f\\n\\r\\t\\v\\u00A0\\u2028\\u2029.

Por ejemplo, /\S\w*/ coincide con 'foo' en "foo bar."

\t Coincide con un tabulado.
\v Coincide con un tabulado vertical.
\w Coincide con cualquier caracter alfanumérico incluido el subrayado. Es equivalente a A-Za-z0-9_. Por ejemplo, /\w/ coincide con 'a' en "apple," '5' en "$5.28," y '3' en "3D."
\W Coincide con cualquier caracter no alfanumérico ni subrayado. Es equivalente a ^A-Za-z0-9_. Por ejemplo, /\W/ o /^$A-Za-z0-9_/ coincide con '%' en "50%."
\n Donde n es un entero positivo. Referencia a la última coincidencia del grupo n de parentesis de la expresión regular (contando parentesis izquierdos). Por ejemplo, /apple(,)\sorange\1/ coincide con 'apple, orange,' en "apple, orange, cherry, peach."
\0 Coincide con el caracter NUL. No debe seguirse con ningún dígito.
\xhh Coincide con el caracter que tiene código hh (dos digitos hexadecimales)
\uhhhh Coincide con el caracter que tiene como código hhhh (cuatro dígitos hexadecimales).