Expresiones regulares -Metacaracteres

Los metacaracteres en las expresiones regulares son caracteres con un significado especial; no representan un significado literal, sino que se utilizan para controlar el patrón de coincidencia.


Metacaracteres básicos

.(punto)

  • Coincide con, aparte del salto de línea (\n) cualquier carácter individual

    Ejemplo:a.bCoincide con "aab", "a1b", "a b", etc.

^(caret)

  • Coincide con la posición inicial de la cadena

  • Ejemplo:^abcCoincide con cadenas que comienzan con "abc"

$(signo de dólar)

  • Coincide con la posición final de la cadena

  • Ejemplo:xyz$Coincide con cadenas que terminan con "xyz"

\(barra invertida)

  • Carácter de escape, hace que el siguiente carácter pierda su significado especial

  • Ejemplo:\.Coincide con un punto literal en lugar de cualquier carácter


Metacaracteres de clases de caracteres

[](corchetes)

  • Define un conjunto de caracteres, coincide con cualquiera de los caracteres del conjunto

  • Ejemplo:[aeiou]Coincide con cualquier vocal

[^](clase de caracteres negada)

  • Coincide con cualquier carácter que no esté entre corchetes

  • Ejemplo:[^0-9]Coincide con cualquier carácter que no sea un dígito

-(guion)

  • Representa un rango dentro de una clase de caracteres

  • Ejemplo:[a-z]Coincide con cualquier letra minúscula


Metacaracteres cuantificadores

*(asterisco)

  • Coincide con la subexpresión anterior cero o más veces

  • Ejemplo:ab*cCoincide con "ac", "abc", "abbc", etc.

+(signo más)

  • Coincide con la subexpresión anterior una o más veces

  • Ejemplo:ab+cCoincide con "abc", "abbc" pero no con "ac"

?(signo de interrogación)

  • Coincide con la subexpresión anterior cero o una vez

  • Ejemplo:colou?rCoincide con "color" y "colour"

{n}(llaves)

  • Coincide exactamente n veces

  • Ejemplo:a{3}Coincide con "aaa"

{n,}

  • Coincide al menos n veces

  • Ejemplo:a{2,}Coincide con "aa", "aaa", etc.

{n,m}

  • Coincide de n a m veces

  • Ejemplo:a{2,4}Coincide con "aa", "aaa", "aaaa"


Metacaracteres de agrupación y selección

()(paréntesis)

  • Define una subexpresión o grupo de captura

  • Ejemplo:(ab)+Coincide con "ab", "abab", etc.

|(barra vertical)

  • Representa la relación "o"

  • Ejemplo:cat|dogCoincide con "cat" o "dog"


Metacaracteres de clases de caracteres especiales

\d

  • Coincide con cualquier dígito, equivalente a[0-9]

\D

  • Coincide con cualquier no dígito, equivalente a[^0-9]

\w

  • Coincide con cualquier carácter de palabra (letra, dígito, guion bajo), equivalente a[a-zA-Z0-9_]

\W

  • Coincide con cualquier carácter que no sea de palabra, equivalente a[^a-zA-Z0-9_]

\s

  • Coincide con cualquier carácter de espacio en blanco (espacio, tabulador, salto de línea, etc.)

\S

  • Coincide con cualquier carácter que no sea espacio en blanco


Metacaracteres de coincidencia de límites

\b

  • Coincide con un límite de palabra

  • Ejemplo:\bcat\bCoincide con "cat" pero no con "category"

\B

  • Coincide con un no límite de palabra

  • Ejemplo:\Bcat\BCoincide con "cat" en "scattered" pero no con "cat" solo


Otros metacaracteres

\n

  • Coincide con un salto de línea

\t

  • Coincide con un tabulador

\r

  • Coincide con un retorno de carro

\f

  • Coincide con un salto de página

\v

  • Coincide con un tabulador vertical


Cuantificadores codiciosos y no codiciosos

Por defecto, los cuantificadores (*, +, ?, {}) son codiciosos e intentan coincidir con tantos caracteres como sea posible. Agregar?después del cuantificador lo convierte en modo no codicioso (perezoso):

  • *?: cero o más, pero lo menos posible

  • +?: una o más, pero lo menos posible

  • ??: cero o una, pero lo menos posible

  • {n,m}?: de n a m, pero lo menos posible

Ejemplo:<.*?>Coincide con etiquetas HTML sin cruzar etiquetas


Búsqueda anticipada positiva y negativa

(?=...)(búsqueda anticipada positiva)

  • Coincide con una posición que va seguida de un patrón específico

  • Ejemplo:Windows(?=95|98)Coincide con "Windows" cuando va seguido de 95 o 98

(?!...)(búsqueda anticipada negativa)

  • Coincide con una posición que no va seguida de un patrón específico

  • Ejemplo:Windows(?!95|98)Coincide con "Windows" cuando no va seguido de 95 o 98

(?<=...)(búsqueda retrospectiva positiva)

  • Coincide con una posición que va precedida de un patrón específico

  • Ejemplo:(?<=95|98)WindowsCoincide con "Windows" cuando va precedido de 95 o 98

(?<!...)(búsqueda retrospectiva negativa)

  • Coincide con una posición que no va precedida de un patrón específico

  • Ejemplo:(?<!95|98)WindowsCoincide con "Windows" cuando no va precedido de 95 o 98

Ejemplo

A continuación analizamos una expresión regular para coincidir con un correo electrónico, como se muestra a continuación:

Ejemplo

var str = "abcd [email protected] 1234"; var patt1 = /\b[\w.%+-]+@[\w.-]+\.[a-zA-Z]{2,6}\b/g; document.write(str.match(patt1));

El texto marcado a continuación es la expresión que obtuvo la coincidencia:


Pruébalo »

La siguiente tabla contiene la lista completa de metacaracteres y su comportamiento en el contexto de las expresiones regulares:

Carácter Descripción
\

Marca el siguiente carácter como un carácter especial, un carácter literal, una referencia hacia atrás o un escape octal. Por ejemplo, 'n' coincide con el carácter "n". '\n' coincide con un salto de línea. La secuencia '\\' coincide con "\" y "\(" coincide con "(".

^

Coincide con la posición inicial de la cadena de entrada. Si se establece la propiedad Multiline del objeto RegExp, ^ también coincide con la posición después de '\n' o '\r'.

$

Coincide con la posición final de la cadena de entrada. Si se establece la propiedad Multiline del objeto RegExp, $ también coincide con la posición antes de '\n' o '\r'.

*

Coincide con la subexpresión anterior cero o más veces. Por ejemplo, zo* puede coincidir con "z" y "zoo". * es equivalente a {0,}.

+

Coincide con la subexpresión anterior una o más veces. Por ejemplo, 'zo+' puede coincidir con "zo" y "zoo", pero no con "z". + es equivalente a {1,}.

?

Coincide con la subexpresión anterior cero o una vez. Por ejemplo, "do(es)?" puede coincidir con "do" o "does". ? es equivalente a {0,1}.

{n}

n es un entero no negativo. Coincide exactamente n veces. Por ejemplo, 'o{2}' no coincide con la 'o' en "Bob", pero sí coincide con las dos o en "food".

{n,}

n es un entero no negativo. Coincide al menos n veces. Por ejemplo, 'o{2,}' no coincide con la 'o' en "Bob", pero sí coincide con todas las o en "foooood". 'o{1,}' es equivalente a 'o+'. 'o{0,}' es equivalente a 'o*'.

{n,m}

m y n son enteros no negativos, donde n <= m. Coincide como mínimo n veces y como máximo m veces. Por ejemplo, "o{1,3}" coincidirá con las tres primeras o en "fooooood". 'o{0,1}' es equivalente a 'o?'. Ten en cuenta que no puede haber espacios entre la coma y los dos números.

?

Cuando este carácter sigue inmediatamente a cualquier otro cuantificador (*, +, ?, {n}, {n,}, {n,m}), el patrón de coincidencia es no codicioso. El modo no codicioso coincide con la menor cantidad posible de caracteres de la cadena buscada, mientras que el modo codicioso predeterminado coincide con la mayor cantidad posible. Por ejemplo, para la cadena "oooo", 'o+?' coincidirá con un solo "o", mientras que 'o+' coincidirá con todas las 'o'.

.

Coincide con cualquier carácter individual excepto los saltos de línea (\n, \r). Para coincidir con cualquier carácter, incluido '\n', utilice un patrón como(.|\n)del patrón.

(pattern)

Coincide con pattern y captura esta coincidencia. La coincidencia capturada se puede obtener de la colección Matches; en VBScript use la colección SubMatches, y en JScript use las propiedades $0…$9. Para coincidir con caracteres de paréntesis, utilice '\(' o '\)'.

(?:pattern)

Coincide con el patrón pero no obtiene el resultado de la coincidencia; es decir, es una coincidencia no capturada que no se almacena para uso posterior. Esto es útil al usar el carácter "o" (|) para combinar varias partes de un patrón. Por ejemplo, 'industr(?:y|ies) es una expresión más concisa que 'industry|industries'.

(?=pattern)

Inspección anticipada positiva (look ahead positive assert): coincide con la cadena de búsqueda al inicio de cualquier cadena que coincida con el patrón. Es una coincidencia no capturada, es decir, no se necesita capturar la coincidencia para uso posterior. Por ejemplo, "Windows(?=95|98|NT|2000)" puede coincidir con "Windows" en "Windows2000", pero no con "Windows" en "Windows3.1". La inspección anticipada no consume caracteres; es decir, después de que ocurre una coincidencia, la búsqueda de la siguiente coincidencia comienza inmediatamente después de la última coincidencia, no desde después de los caracteres que incluyen la inspección anticipada.

(?!pattern)

Inspección anticipada negativa (negative assert): coincide con la cadena de búsqueda al inicio de cualquier cadena que no coincida con el patrón. Es una coincidencia no capturada, es decir, no se necesita capturar la coincidencia para uso posterior. Por ejemplo, "Windows(?!95|98|NT|2000)" puede coincidir con "Windows" en "Windows3.1", pero no con "Windows" en "Windows2000". La inspección anticipada no consume caracteres; es decir, después de que ocurre una coincidencia, la búsqueda de la siguiente coincidencia comienza inmediatamente después de la última coincidencia, no desde después de los caracteres que incluyen la inspección anticipada.

(?<=pattern) Inspección retrospectiva positiva (look behind positive assert), similar a la inspección anticipada positiva, solo que en dirección opuesta. Por ejemplo, "(?<=95|98|NT|2000)Windows"puede coincidir con"2000Windows"en"Windows", pero no puede coincidir con"3.1Windows"en"Windows"。
(?<!pattern) Inspección retrospectiva negativa, similar a la inspección anticipada negativa, solo que en dirección opuesta. Por ejemplo, "(?<!95|98|NT|2000)Windows"puede coincidir con"3.1Windows"en"Windows", pero no puede coincidir con"2000Windows"en"Windows"。
x|y

Coincide con x o y. Por ejemplo, 'z|food' puede coincidir con "z" o "food". "(z|f)ood" coincide con "zood" o "food".

[xyz]

Conjunto de caracteres. Coincide con cualquiera de los caracteres incluidos. Por ejemplo, '[abc]' puede coincidir con 'a' en "plain".

[^xyz]

Conjunto de caracteres negado. Coincide con cualquier carácter no incluido. Por ejemplo, '[^abc]' puede coincidir con 'p', 'l', 'i', 'n' en "plain".

[a-z]

Rango de caracteres. Coincide con cualquier carácter dentro del rango especificado. Por ejemplo, '[a-z]' puede coincidir con cualquier letra minúscula en el rango de 'a' a 'z'.

[^a-z]

Rango de caracteres negado. Coincide con cualquier carácter que no esté dentro del rango especificado. Por ejemplo, '[^a-z]' puede coincidir con cualquier carácter que no esté en el rango de 'a' a 'z'.

\b

Coincide con un límite de palabra, es decir, la posición entre una palabra y un espacio. Por ejemplo, 'er\b' puede coincidir con 'er' en "never", pero no con 'er' en "verb".

\B

Coincide con un no límite de palabra. 'er\B' puede coincidir con 'er' en "verb", pero no con 'er' en "never".

\cx

Coincide con el carácter de control indicado por x. Por ejemplo, \cM coincide con un Control-M o retorno de carro. El valor de x debe ser uno de A-Z o a-z. De lo contrario, c se considera un carácter literal 'c'.

\d

Coincide con un carácter de dígito. Equivalente a [0-9].

\D

Coincide con un carácter que no es dígito. Equivalente a [^0-9].

\f

Coincide con un salto de página. Equivalente a \x0c y \cL.

\n

Coincide con un salto de línea. Equivalente a \x0a y \cJ.

\r

Coincide con un retorno de carro. Equivalente a \x0d y \cM.

\s

Coincide con cualquier carácter de espacio en blanco, incluidos espacio, tabulador, salto de página, etc. Equivalente a [ \f\n\r\t\v].

\S

Coincide con cualquier carácter que no sea espacio en blanco. Equivalente a [^ \f\n\r\t\v].

\t

Coincide con un tabulador. Equivalente a \x09 y \cI.

\v

Coincide con un tabulador vertical. Equivalente a \x0b y \cK.

\w

Coincide con letras, dígitos y guiones bajos. Equivalente a '[A-Za-z0-9_]'.

\W

Coincide con cualquier carácter que no sea letra, dígito o guion bajo. Equivalente a '[^A-Za-z0-9_]'.

\xn

Coincide con n, donde n es un valor de escape hexadecimal. El valor de escape hexadecimal debe tener exactamente dos dígitos. Por ejemplo, '\x41' coincide con "A". '\x041' es equivalente a '\x04' & "1". En las expresiones regulares se puede usar codificación ASCII.

\num

Coincide con num, donde num es un entero positivo. Es una referencia a la coincidencia capturada. Por ejemplo, '(.)\1' coincide con dos caracteres idénticos consecutivos.

\n

Identifica un valor de escape octal o una retroreferencia. Si hay al menos n subexpresiones capturadas antes de \n, entonces n es una retroreferencia. De lo contrario, si n es un dígito octal (0-7), entonces n es un valor de escape octal.

\nm

Identifica un valor de escape octal o una retroreferencia. Si hay al menos nm subexpresiones obtenidas antes de \nm, entonces nm es una retroreferencia. Si hay al menos n capturas antes de \nm, entonces n es una retroreferencia seguida del texto m. Si no se cumple ninguna de las condiciones anteriores, y tanto n como m son dígitos octales (0-7), entonces \nm coincidirá con el valor de escape octal nm.

\nml

Si n es un dígito octal (0-3), y m y l son dígitos octales (0-7), entonces coincide con el valor de escape octal nml.

\un

Coincide con n, donde n es un carácter Unicode representado con cuatro dígitos hexadecimales. Por ejemplo, \u00A9 coincide con el símbolo de copyright (?).

Otras extensiones