[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/RegExp [Back]  [Original]

RegExp - JavaScript | MDN

Esta pgina ha sido traducida del ingls por la comunidad. Aprende ms y nete a la comunidad de MDN Web Docs.

View in English Always switch to English

RegExp

Baseline Widely available *

This feature is well established and works across many devices and browser versions. Its been available across browsers since julio de 2015.

* Some parts of this feature may have varying levels of support.

El objeto RegExp se utiliza para hacer coincidir texto con un patrn.

Para obtener una introduccin a las expresiones regulares, lee el captulo sobre expresiones regulares en la Gua de JavaScript.

In this article

Descripcin

Notacin literal y constructor

Hay dos formas de crear un objeto RegExp: una notacin literal y un constructor.

  • Los parmetros de la notacin literal se encierran entre barras y no utilizan comillas.
  • Los parmetros de la funcin constructora no se encierran entre barras, pero utilizan comillas.

Las siguientes tres expresiones crean el mismo objeto de expresin regular:

js
let er = /ab+c/i; // notacin literal
let er = new RegExp("ab+c", "i"); // constructor con patrn de cadena como primer argumento
let er = new RegExp(/ab+c/, "i"); // constructor con expresin regular literal como primer argumento (a partir de ECMAScript 6)

La notacin literal da como resultado la compilacin de la expresin regular cuando se evala la expresin. Utiliza la notacin literal cuando la expresin regular permanecer constante. Por ejemplo, si usas notacin literal para construir una expresin regular usada en un bucle, la expresin regular no se volver a compilar en cada iteracin.

El constructor del objeto de expresin regular, por ejemplo, new RegExp('ab+c'), da como resultado la compilacin en tiempo de ejecucin de la expresin regular. Utiliza la funcin constructora cuando sepas que el patrn de expresin regular cambiar, o no conozcas el patrn y lo obtienes de otra fuente, tal como la entrada del usuario.

Banderas en el constructor

A partir de ECMAScript 6, new RegExp(/ab+c/, 'i') ya no arroja un TypeError ("no puedes proporcionar banderas cuando construyes una expresin regular a partir de otra") cuando el primer argumento es una RegExp y el segundo argumento flags est presente. En su lugar, se crea una nueva RegExp a partir de los argumentos.

Cuando se utiliza la funcin constructora, las reglas de escape de cadenas normales (antes de los caracteres especiales con \ cuando se incluyen en una cadena) son necesarias.

Por ejemplo, los siguientes son equivalentes:

js
let er = /\w+/;
let er = new RegExp("\\w+");

Propiedades de expresiones regulares similares a Perl

Ten en cuenta que varias de las propiedades de RegExp tienen nombres largos y cortos (tipo Perl). Ambos nombres siempre se refieren al mismo valor. (Perl es el lenguaje de programacin a partir del cual JavaScript model sus expresiones regulares). Consulta tambin las propiedades en desuso de RegExp

Constructor

RegExp()

Crea un nuevo objeto RegExp.

Propiedades estticas

get RegExp[@@species]

La funcin constructora utilizada para crear objetos derivados.

RegExp.lastIndex

El ndice en el que comenzar la siguiente bsqueda.

Propiedades de la instancia

RegExp.prototype.flags

Una cadena que contiene las banderas del objeto RegExp.

RegExp.prototype.dotAll

Si el "." coincide con nuevas lneas o no.

RegExp.prototype.global

Si se debe probar o no la expresin regular con todas las posibles ocurrencias en una cadena, o solo con la primera.

RegExp.prototype.ignoreCase

Si se deben o no ignorar las maysculas/minsculas al buscar en una cadena.

RegExp.prototype.multiline

Si buscar o no en cadenas multilnea.

RegExp.prototype.source

El texto del patrn.

RegExp.prototype.sticky

Si la bsqueda es pegajosa o no.

RegExp.prototype.unicode

Si las funciones Unicode estn habilitadas o no.

Mtodos de instancia

RegExp.prototype.compile()

(Re)compila una expresin regular durante la ejecucin de un script.

RegExp.prototype.exec()

Ejecuta una bsqueda de una coincidencia en su parmetro de cadena.

RegExp.prototype.test()

Prueba una coincidencia en su parmetro de cadena.

RegExp.prototype.toString()

Devuelve una cadena que representa el objeto especificado. Redefine el mtodo Object.prototype.toString().

RegExp.prototype[@@match]()

Realiza la coincidencia con la cadena dada y devuelve el resultado de la coincidencia.

RegExp.prototype[@@matchAll]()

Devuelve todas las coincidencias de la expresin regular con una cadena.

RegExp.prototype[@@replace]()

Reemplaza las coincidencias en una cadena dada con una nueva subcadena.

RegExp.prototype[@@search]()

Busca la coincidencia en la cadena dada y devuelve el ndice del patrn encontrado en la cadena.

RegExp.prototype[@@split]()

Divide la cadena dada en un arreglo separando la cadena en subcadenas.

Ejemplos

Usar una expresin regular para cambiar el formato de los datos

El siguiente script usa el mtodo replace() de la instancia String para hacer coincidir una nombre en el formato primero ltimo y enviarlo en el formato ltimo, primero.

En el texto de reemplazo, el script usa $1 y $2 para indicar los resultados de los correspondientes parntesis coincidentes en el patrn de expresin regular.

js
let er = /(\w+)\s(\w+)/;
let str = "John Smith";
let newstr = str.replace(er, "$2, $1");
console.log(newstr);

Esto muestra "Smith, John".

Uso de expresiones regulares para dividir lneas con diferentes finales de lnea/saltos de lnea

El final de lnea predeterminado vara segn la plataforma (Unix, Windows, etc.). La divisin de lneas proporcionada en este ejemplo funciona en todas las plataformas.

js
let texto = "Un poco de texto\ny un poco ms\r\ny an\reste es el final";
let lineas = texto.split(/\r\n|\r|\n/);
console.log(lineas); // logs [ 'Un poco de texto', 'y un poco ms', 'y an', 'este es el final' ]

Ten en cuenta que el orden de los patrones en la expresin regular es importante.

Usar expresiones regulares en varias lneas

js
let s = "Por favor, s\nhazme el da!";

s.match(/s.*da/);
// Devuelve null

s.match(/s[^]*da/);
// Devuelve ["s\nhazme el da"]

Usar una expresin regular con la bandera pegajosa

La bandera sticky indica que la expresin regular realiza una coincidencia permanente en la cadena de destino al intentar hacer coincidir a partir de RegExp.prototype.lastIndex.

js
let str = "#foo#";
let regex = /foo/y;

regex.lastIndex = 1;
regex.test(str); // true
regex.lastIndex = 5;
regex.test(str); // false (lastIndex se tiene en cuenta con una bandera pegajosa)
regex.lastIndex; // 0 (restablecer despus de un error de coincidencia)

La diferencia entre la bandera pegajosa y la bandera global

Con la bandera pegajosa y, la siguiente coincidencia tiene que ocurrir en la posicin lastIndex, mientras que con la bandera global g, la coincidencia puede ocurrir en la posicin lastIndex o posterior:

js
er = /\d/y;
while ((r = re.exec("123 456"))) console.log(r, "Y er.lastIndex", er.lastIndex);

// [ '1', index: 0, input: '123 456', groups: undefined ] AND er.lastIndex 1
// [ '2', index: 1, input: '123 456', groups: undefined ] AND er.lastIndex 2
// [ '3', index: 2, input: '123 456', groups: undefined ] AND er.lastIndex 3
//   ... y no ms coincidencias.

Con la bandera global g, coincidiran los 6 dgitos, no solo 3.

Expresin regular y caracteres Unicode

\w y \W solo coincide con caracteres basados en ASCII; por ejemplo, a a z, A a Z, 0 a 9 y _.

Para hacer coincidir caracteres de otros idiomas como Cirlico o Hebreo, usa \uhhhh, donde hhhh es el Valor Unicode en hexadecimal.

Este ejemplo demuestra cmo se pueden separar los caracteres Unicode de una palabra.

js
let texto = " texto   ";
let regex = /[\u0400-\u04FF]+/g;

let match = regex.exec(text);
console.log(match[0]); // registra ''
console.log(regex.lastIndex); // registra '7'

let match2 = regex.exec(texto);
console.log(match2[0]); // registra '' [no registr 'texto']
console.log(regex.lastIndex); // registra '15'

// y as sucesivamente

La funcin Escapes de propiedad Unicode presenta una solucin, al permitir una declaracin tan simple como \p{scx=Cyrl}.

Extraer el nombre de subdominio de la URL

js
let url = "http://xxx.dominio.com";
console.log(/[^.]+/.exec(url)[0].substr(7)); // registra 'xxx'

Nota: En lugar de utilizar expresiones regulares para analizar las URL, normalmente es mejor utilizar el analizador de URL integrado en los navegadores mediante la API URL.

Especificaciones

Specification
ECMAScript 2027 LanguageSpecification
# sec-regexp-regular-expression-objects

Compatibilidad con navegadores

Notas especficas de Firefox

A partir de Firefox 34, en el caso de un grupo de captura con cuantificadores que impiden su ejercicio, el texto coincidente para un grupo de captura ahora es undefined en lugar de una cadena vaca:

js
// Firefox 33 o anterior
"x".replace(/x(.)?/g, function (m, group) {
  console.log("'grupo: " + group + "'");
});
// 'grupo: '

// Firefox 34 o ms reciente
"x".replace(/x(.)?/g, function (m, group) {
  console.log("'grupo: " + group + "'");
});
// 'grupo: undefined'

Ten en cuenta que, debido a la compatibilidad web, RegExp.$N seguir devolviendo una cadena vaca en lugar de undefined (Error 1053944 en Firefox).

Ve tambin


Web Proxy Viewer  |  New URL  |  Original Page