RegExp en JavaScript

RegExp en JavaScript
RegExp en JavaScript

Un objeto RegExp en javascript es un constructor que crea expresiones regulares para hacer coincidir el texto con un patrón.

Estructura RegExp javascript

Las expresiones regulares pueden tomar la siguiente forma (forma corta, función constructora, función RegExp):

/pattern/flags
new RegExp(pattern[, flags])
RegExp(pattern[, flags])

pattern

Expresión regular.

flags

Si se le da un valor a este argumento, contendrá una combinación de los siguientes indicadores.

g

Coincidencias en toda la cadena, es decir, encontrar todas las coincidencias en lugar de detenerse en la primera coincidencia.

i

Ignorar caso.

m

Multilínea, es decir, tratar el carácter de inicio y fin (es decir, ^$) en más de una línea (es decir, coincidirá con el inicio y el final de cada línea [separados por el carácter ‎\n‎\r] y no con el inicio y el final de toda la cadena) .

u

Cadena Unicode, es decir, trata el patrón como una serie de puntos de código Unicode.

y

La coincidencia comenzará desde el índice indicado por la propiedad lastIndex del objeto de expresión regular en la cadena de destino y no se intentará ninguna coincidencia antes de ese índice.

Características generales

Hay dos formas de crear un objeto RegExp en javascript: la forma abreviada y el constructor. Tenga en cuenta que la forma abreviada no está entre comillas, pero los argumentos pasados ​​a la función constructora pueden ir entre comillas. Es decir, las siguientes formas son equivalentes:

/ab+c/i;
new RegExp('ab+c', 'i');
new RegExp(/ab+c/, 'i');

La forma corta «construye» la expresión regular al estimar el valor de la expresión que contiene. Utilice la forma abreviada cuando esté seguro de que la expresión regular seguirá siendo la misma. Es decir, si usa la forma corta para crear una expresión regular usada en un ciclo de iteración, la expresión no se reconstruirá en cada iteración.

El constructor new RegExp('ab+c')‎proporciona una construcción en tiempo de ejecución para la expresión regular. Utilice el constructor cuando sepa que la expresión regular cambiará o cuando no conozca el patrón y desee obtenerlo de una fuente externa, como la entrada del usuario.

A partir de ECMAScript 2015 (es decir, ES6), la expresión new RegExp(/ab+c/, 'i')‎ no arrojará un error TypeError(con «no se pueden proporcionar indicadores al construir una expresión regular a partir de otra») cuando el primer argumento es una expresión regular (de tipo RegExp) y el argumento flags está presente.

Cuando use el constructor, tenga en cuenta que las reglas para el escape de caracteres tradicionales (es decir, carreras de caracteres con barra invertida \) serán necesarias. por ejemplo:

var re = /\w+/;
var re = new RegExp('\\w+');

Caracteres especiales en expresiones regulares.

Clases de expresiones

TipografíaSignificado
.El punto coincide con cualquier carácter excepto los caracteres al final de la línea: ‎\ny , ‎\ry , \u2028‎\u2029. Dentro de un conjunto de caracteres, el punto perderá su significado y coincidirá con el carácter de punto normal. Tenga en cuenta que la bandera m no cambia el comportamiento del punto. Por ejemplo, la expresión /.y/coincidirá con "my""ay", pero no "yes"en la oración "yes make my day".
‎\dCoincidencia de cualquier número. Recompensa [‎0-9]. Por ejemplo, expresión /\d/‎/‎‎[0-9]‎/coincidirá "2"en la oración "B2 is the suite number".
‎\DCoincide con cualquier carácter que no sea un número. Recompensa [‎0-9]. Por ejemplo, expresión /\D/‎/‎‎[^0-9]‎/coincidirá "B"en la oración "B2 is the suite number".
‎\wCoincidencia de cualquier carácter o número (es decir, caracteres latinos básicos con números y guiones bajos). Es equivalente [A-Za-z0-9_]‎.Por ejemplo, la expresión /\w/‎coincidirá "a"en "apple""5"en "‎$5.28""3"en "3D".
‎\WCoincide con cualquier carácter latino no basal con números y guiones bajos. Es equivalente [^A-Za-z0-9_]‎. Por ejemplo, la expresión /\W/‎coincidirá "%"en "50%‎‎‎".
‎\sCoincide con un solo espacio, incluido el espacio normal, el espacio de tabulación, el carácter de nueva línea, etc., que es equivalente a ‎[ ‎\f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]‎‎. Por ejemplo, la expresión /\s\w*/coincide " bar"‎con "foo bar".
‎\SCoincide con cualquier carácter excepto los espacios, incluido el espacio regular, el espacio de tabulación, el carácter de nueva línea, etc., que es equivalente a ‎[^ ‎\f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]‎‎. Por ejemplo, la expresión /\S\w*/coincide "foo"‎con "foo bar".
‎\tCoincidencia de la distancia de la pestaña horizontal.
‎\rCoincide con un retorno de carro.
‎\nCoincidencia de un personaje Mover a una nueva línea.
‎\fCoincidencia de un tipo de letra Saltar a una nueva página (alimentación de formulario).
‎[\b]‎Coincide con el carácter de retroceso (no confundir con \ b).
‎\0Coincide con el carácter NUL.
‎\cXdonde X es un carácter de la A a la Z, que corresponde al carácter de control en una cadena de texto. Por ejemplo, la expresión ‎/\cM/‎coincide con control-M en una cadena.
‎\xhhHace coincidir el carácter con el símbolo hh(dos dígitos en hexadecimal).
‎\xhhhhCoincide con el carácter en la codificación UTF-16 del símbolo hhhh(cuatro dígitos en hexadecimal).
‎\u{hhhh}‎ o ‎\u{hhhhh}‎(Estos patrones sólo se pueden usar al configurar la bandera u) Coincidencia de un carácter que tiene un valor Unicode o (números en hexadecimal). U+hhhh U+hhhhh
\Si se usa con caracteres regulares, indica que el siguiente carácter tiene un significado especial. Por ejemplo, la expresión /b/significa hacer coincidir la letra "b", pero con una barra invertida antes de la letra "b"(es decir, la expresión se convertirá en ‎/\b/), el carácter tendrá un significado especial, que coincide con los límites de las palabras. Si se usa con caracteres especiales, indica que el siguiente carácter no tiene un significado especial y su valor debe interpretarse como es. Por ejemplo, un carácter "*"es un carácter especial que significa coincidir con la expresión precedida por 0 o más veces. Cualquier expresión que /a*/‎signifique hacer coincidir el carácter "a"de cero o más veces, pero para que coincida con el símbolo de la estrella , pondremos una barra inclinada hacia atrás antes, esa expresión /a\*/‎coincidirá "‎a*‎".

Conjuntos de caracteres

GrupoSignificado
[xyz][a-c]Un conjunto de caracteres, que coincide con cualquiera de los caracteres que contiene. Podemos especificar un campo usando un guión, pero si encuentra un guión como el primer o último carácter del conjunto, se interpretará como un guión normal. También es posible incluir clases de caracteres dentro de un conjunto de caracteres. Por ejemplo, la expresión es [abcd]equivalente [a-d]y coincide "b"en "brisket""c"en "chop". Ejemplo, la expresión [abcd-]o expresión [-abcd]coincidirá "b"en "brisket""c"en "chop""-"en "non-profit".
[‎^xyz‎][‎‎^a-c]Un conjunto de caracteres invertidos (o negativos), lo que significa que coinciden con cualquier cosa que no esté entre paréntesis. Por ejemplo, la expresión es similar[^abc] [^a-c]‎, que corresponde "t""bat""h"en "chop".

Conjunto de elección

TipografíaSignificado
x|yCoincidencia xy. Por ejemplo, la expresión /green|red/coincidirá "green"en "green apple""red"en "red apple".

la frontera

tipografiaSignificado
^Coincide con el inicio de la entrada, y si la bandera está m activada, coincide directamente con el carácter de publicación del salto a un carácter de nueva línea. Por ejemplo, la expresión /^A/no coincidirá "A"en "an A"pero coincidirá con la primera "A"en "An A".
$Coincide con el final de la entrada y, si se m establece la bandera, coincide directamente con el prefijo del carácter de salto. Por ejemplo, la expresión /t$/‎no coincidirá "t"en "eater"pero Satabgaha en "eat".
‎\bCoincidencia de límites de palabras, que es donde un carácter que se puede encontrar en palabras no va seguido de un carácter que puede estar en palabras, como un espacio u otro carácter. Ejemplos:Expresión /\bm/‎coincide "m"en "moon".La expresión /oo\b/‎no coincide "oo"en lo "moon"que "oo"sigue "n"que es la letra de las palabras del juego de caracteres. La expresión ‎/oon\b/coincide "oon"en "moon"porque "oon"al final de la cadena, por lo que no será seguido por un carácter de palabra. La expresión ‎/\w\b\w/no coincidirá con nada, porque un carácter de palabra no puede ir seguido de un carácter que no sea de palabra y un carácter de palabra al mismo tiempo.
‎\BCoincidir con lo que no es un límite de palabras. Es el lugar donde la letra anterior y la siguiente son del mismo tipo: es decir, ambas son caracteres de palabra o ambas no son caracteres de palabra. Como entre personajes o entre espacios. Por ejemplo, la expresión /\Bon/‎coincide con "on"la "at noon"expresión /ye\B/‎partidos "ye"en "possibly yesterday".

Grupos

TipografíaSignificado
(x)Haga coincidir el sub patrón y x guarde ese patrón. Por ejemplo, el patrón /(foo)/coincide "foo"y se "foo bar"mantiene. Grupos enumerados en el orden en que se reciben desde la izquierda, empezando por 1, de los que se pueden llamar cadenas de texto de los correspondientes subestilos entre paréntesis desde la matriz resultante de [1], ..., [n]‎o de las propiedades del objeto RegExp desde ‎$1, ..., $9.Tenga en cuenta que estos paréntesis afectarán el rendimiento, por lo que si no los necesita, use paréntesis que no contengan valores (ver más abajo).
‎\ndonde nes un número entero positivo, que es una indicación de lo que se ha emparejado en el sub patrón (entre paréntesis) cuyo orden es n(la numeración comienza en 1 desde la izquierda).Por ejemplo, la expresión ‎/apple(,)\sorange\1/coincide "apple, orange,"‎con "apple, orange, cherry, peach". Daremos un ejemplo complejo en la siguiente tabla.
(‎?:x)Coincide con el subpatrón x pero no recuerda el resultado de la coincidencia.

Cuantificación

tipografíaSignificado
x*‎Coincide con el patrón precedido por 0 o más veces.Por ejemplo, la expresión /bo*/‎coincide "boooo"en "A ghost booooed""b"en "A bird warbled", y no coincidirá con nada "A goat grunted".
x+‎Haga coincidir el patrón que lo precede una o más veces. Es similar ‎{1,}‎. Por ejemplo, la expresión /a+/‎coincide con "a"in "candy""aaaaaaa"in "caaaaaaandy".
x?‎Coincide con el patrón precedido por 0 veces o solo una vez. Por ejemplo, la expresión /e?le?/‎coincide con "el"in "angel""le"in "angle".Si este símbolo utiliza directamente algunos de cualquier cuantificador (es decir, *+?{}) que hará que la selección «no expansivo» (búsqueda de la menor cantidad de texto posible), en contraste con el caso por defecto de «selección codicioso» (coincidente como tanto texto como sea posible)).
x{n}‎Patrón que coincide con el x número de n veces específicamente, ya que n es un número entero positivo. Por ejemplo /a{2}/‎no coincide "a"en "candy"que coincide con "aa"la "caandy"primera "aa"en "caaandy".
x{n,}‎x Número de coincidencia de patrón n al menos una vez, ya que n es un número entero positivo. Por ejemplo /a{2,}/‎, no coincide "a"en "candy"pero coincide con todos los caracteres «a» en "caandy""caaaaaandy".
x{n,m}‎Patrón que coincide con el x número de n veces y al menos m una vez como máximo, ya que nm son las dos cuestiones correctas. Por ejemplo /a{1,3}/‎, no coincide con nada en "cndy", y coincide "a"con "candy"la coincidencia "aa"en "caandy"los primeros 3 caracteres "a"en "caaaaaaaaandy", tenga en cuenta que cuando se empareja la cadena de texto, el "caaaaaaaaandy"resultado correspondiente es "aaa"con la cadena de texto original en la que se duplican más tipos de letra "a".
x*?‎x+?‎x??‎x{n}?‎x{n,}?‎x{n,m}?‎Haga coincidir la menor cantidad de texto posible. Por ejemplo, el patrón ‎/<.*?>/coincide con «<foo>» en «<foo> <bar>», mientras que el patrón coincide con ‎/<.*>/‎toda la cadena, es decir,"<foo> <bar>". En pocas palabras: los cuantificadores son «codiciosos» por defecto, a menos que los usemos ?.

Condiciones

TipografíaSignificado
x(?=y)‎Coincide x si es x seguido inmediatamente por y. Por ejemplo, la expresión /Jack(?=Sprat)/coincide "Jack"si va seguida de la palabra "Spart". La expresión /Jack(?=Sprat|Frost)/‎coincide "Jack"si va seguida de la palabra "Spart""Frost". Pero tenga en cuenta que serán "Spart""Frost"no parte de la cadena correspondiente.
x(?!y)‎Coincidir x si x no está seguido de y. Por ejemplo, los de expresión /\d+(?!\.)/‎números coinciden usted no se siguieron por una coma decimal, que coincide "141"no "3.141".

Propiedades constructora RegExp

RegExp.prototype

Esta propiedad permite agregar propiedades que están disponibles para todos los objetos cuyo tipo es RegExp.

RegExp.length

El valor de esta propiedad es 2.

RegExp.lastIndex

El índice desde el que comenzar la búsqueda.

Funciones constructivista RegExp

El constructor no tiene RegExp funciones secundarias, pero hereda algunas funciones a través de la cadena de prototipos, como se menciona en la siguiente sección.

Características prototipo de objeto

Las versiones construidas de un constructor  RegExp heredan funciones y propiedades de un objeto RegExp.prototype. Al igual que con todos los constructores, puede realizar cambios en un objeto  prototype en el constructor para que esos cambios se reflejen en todas las instancias del objeto  RegExp.

Tenga en cuenta que varias propiedades de objeto RegExp tienen nombres largos y cortos (similar a Perl). Ambos nombres se refieren al mismo valor. Perl es un lenguaje de programación del que JavaScript extrae sus expresiones regulares.

RegExp.prototype.constructor

Especifica la función que creará el prototipo del objeto RegExp; Consulte la página de funciones Object.prototype.constructor para obtener más detalles.

RegExp.prototype.flags

Una cadena que contiene las banderas utilizadas en un objeto RegExp.

RegExp.prototype.global

Determina si la expresión regular se probará en todas las posibles coincidencias en la cadena o si se detendrá después de la primera coincidencia.

RegExp.prototype.ignoreCase

Determina si la expresión regular ignorará las mayúsculas y minúsculas al intentar realizar una coincidencia en la cadena de texto.

RegExp.prototype.multiline

Determina si la expresión regular coincidirá en más de una línea.

RegExp.prototype.source

Texto de expresión regular.

RegExp.prototype.sticky

Determine si la búsqueda comenzará a partir de un valor lastIndex o no.

RegExp.prototype.unicode

Determine si se habilitarán o no las funciones Unicode.

RegExp.prototype.compile()‎

Refactorización de expresiones regulares durante la ejecución del script. Esta función no es modular, pero se agregó recientemente. No se recomienda usarla, pero se supone que se debe usar el constructor RegExp.

RegExp.prototype.exec()‎

Encuentre un patrón en la cadena dada y devuelva los resultados.

RegExp.prototype.test()‎

Comprueba el patrón en la cadena dada.

RegExp.prototype.[@@match]()‎

Busca un patrón en la cadena dada y devuelve el resultado de la coincidencia.

RegExp.prototype.[@@replace]()‎

Busca un patrón en la cadena dada y devuelve el resultado de la coincidencia.

RegExp.prototype.[@@search]()‎

Busca un patrón en la cadena de texto dada y devuelve el índice de la cadena de texto coincidente.

RegExp.prototype.[@@split]()‎

Dividir la cadena dada en una matriz separándola en subcadenas.

RegExp.prototype.toString()‎

Devuelve una cadena que representa el objeto, que es una redefinición de la función  Object.prototype.toString.

Ejemplos y aplicaciones en código

Usaremos expresiones regulares para cambiar el formato de los datos. El siguiente script usa la función replace del objeto para String hacer coincidir el nombre en la forma de «apodo» y cambiarlo a la forma de «apodo, nombre». Y usaremos ‎$1‎$2para referirnos a cadenas que se han emparejado en subpatrones:

var re = /(\w+)\s(\w+)/;
var str = 'Alberto Blanco' ; 
var newstr = str.replace(re, '$2, $1');
console.log(newstr);  // "Blanco, Alberto"

Los caracteres de final de línea pueden diferir entre sistemas operativos (especialmente entre Unix y Windows), por lo que la siguiente expresión regular romperá las líneas independientemente de los caracteres que se utilicen para pasar a la nueva línea:

var text = 'Some text\nAnd some more\r\nAnd yet\rThis is the end';
var lines = text.split(/\r\n|\r|\n/);
console.log(lines); // [ 'Some text', 'And some more', 'And yet', 'This is the end' ]

Usa una expresión regular en más de una línea

var s = 'Please yes\nmake my day!';
s.match(/yes.*day/);
// null
s.match(/yes[^]*day/);
// ["yes\nmake my day"]

Usando una expresión regular con la bandera » y«. La bandera » y» significa que la expresión regular intentará iniciar la coincidencia comenzando en el índice indicado por el valor RegExp.prototype.lastIndex:

var str = '#foo#';
var regex = /foo/y;

regex.lastIndex = 1;
regex.test(str); // true
regex.lastIndex = 5;
regex.test(str); // false
regex.lastIndex;  // 0 (restablecer el valor de la propiedad después de que falle una coincidencia)

Extraer el nombre del subdominio de la URL.

var url = 'http://xyz.domain.com';
console.log(/[^.]+/.exec(url)[0].substr(7)); // 'xyz'

Expresiones regulares y caracteres Unicode

Como se mencionó anteriormente, coincidirá ‎\w o establecerá ‎\W caracteres ASCII (ASCII) únicamente, de la a a la z y de la A a la Z y de 0 a 9 y la policía inferior _.  Para hacer coincidir caracteres de otros idiomas, como mandarín, árabe o cirílico , utilice la fórmula, ‎\uhhhh ya que hhhh es el valor Unicode del carácter en el sistema hexadecimal. Este ejemplo explica cómo extraer caracteres árabes de una cadena de texto que contiene palabras árabes y extranjeras:

var text =  'código javascript para expresiones regulares' ; 
var regex = /[\u0600-\u06FF]+/g;

var match = regex.exec(text);
console.log(match[0]);        
console.log(regex.lastIndex);  // '5'

var match2 = regex.exec(text);
console.log(match2[0]);        // 'sobre' la 
console.log(regex.lastIndex);  // '19'

// Etcétera

Soporte de navegadores

CaracterísticaChromeFirefoxIEOperaSafari
Soporte básico

Consulte la página de la propiedad y función de cada objeto para RegExp obtener detalles sobre la compatibilidad del navegador.