Las expresiones regulares (o regexes para abreviar) son una poderosa herramienta para la búsqueda de cadenas. Existen desde hace mucho tiempo y se han implementado en una gran variedad de lenguajes. Ahora son omnipresentes en la programación informática.
Tabla de contenido
¿Qué son las expresiones regulares?
Las expresiones regulares son un lenguaje de patrones de cadenas. Una regex es un conjunto de patrones, o expresiones regulares.
Una regex puede usarse para hacer coincidir texto en cadenas, o para encontrar texto en cadenas. Se utilizan para extraer texto, o realizar alguna otra tarea en las cadenas.
- Las expresiones regulares son una forma de describir un patrón que puede o no estar presente en una cadena.
- Las expresiones regulares tienen una sintaxis específica y, por lo tanto, están bastante limitadas en lo que pueden hacer.
En otras palabras, una expresión regular es sólo una cadena de caracteres con un significado especial.
Normalmente no es posible utilizar expresiones regulares para describir cosas que no son regulares.
Esta es una limitación muy importante.
Si quieres usar expresiones regulares para buscar cosas que no son regulares, tendrás que inventar tu propia sintaxis de propósito especial que haga lo que quieres.
Por ejemplo, puede utilizar expresiones regulares para buscar cadenas que contengan al menos una letra mayúscula, y puede hacerlo sin utilizar ninguna sintaxis especial de expresiones regulares.
Sin embargo, no es posible hacer coincidir cadenas que tengan exactamente una letra mayúscula.
¿Cómo escribir una expresión regular?
Se puede crear una expresión regular utilizando la siguiente sintaxis:
Regex.Replace(fuente, patrón, reemplazo)
El método Replace reemplaza todas las instancias del patrón especificado con el reemplazo especificado. Puede especificar un único patrón o una expresión regular que utilice la alternancia (el carácter |).
Alternancia significa que la expresión regular puede coincidir con el patrón una o más veces, o puede coincidir con el patrón cero o más veces. Puede combinar el carácter | con otros operadores, como el carácter +, lo que significa que el patrón puede coincidir con el patrón una o más veces, o puede coincidir con el patrón cero o más veces.
La cadena de origen debe coincidir con el patrón antes de ser reemplazada. Si el patrón no coincide con la cadena de origen, el método devuelve una cadena vacía.
Si el patrón coincide con la cadena de origen, el método sustituye todas las instancias del patrón por la cadena de sustitución. Si el patrón no coincide con la cadena de origen, el método devuelve la cadena de origen.
Por ejemplo, el siguiente código crea una expresión regular que reemplaza todas las instancias del patrón myname con una estrella (*). El patrón coincide con la cadena myname si va seguida de un espacio. La cadena de origen se sustituye por un asterisco (*).
¿Cuáles son los componentes de las expresiones regulares?
Los principales componentes de las expresiones regulares son las clases de caracteres, los paréntesis, los cuantificadores, las alternancias, los lookaheads y lookbehinds, y las clases de caracteres con cuantificadores.
Clases de caracteres
Una clase de caracteres es un conjunto de caracteres, como los caracteres entre a y b, o entre x e y, o entre z y A. Se utiliza para especificar un conjunto de caracteres que se excluyen del resto de la expresión regular.
Puede utilizar las clases de caracteres para restringir el conjunto de caracteres que son válidos en una expresión regular.
Empecemos por conocer una clase de caracteres simple, [a-z]. Esta clase de caracteres se llama clase de caracteres porque contiene a-z, que es el conjunto de todas las letras minúsculas. Esta clase de caracteres no es muy útil porque no contiene ninguna letra mayúscula, y tampoco contiene ningún dígito.
Expresiones regulares símbolos
Los símbolos de las expresiones regulares son caracteres especiales que definen la sintaxis de las expresiones regulares.
Algunos de ellos son metacaracteres que tienen un significado especial en las expresiones regulares, y otros son caracteres que no son especiales.
Los símbolos de expresiones regulares también se denominan a veces metacaracteres.
Hay dos tipos de símbolos de expresiones regulares: metasímbolos y no metasímbolos.
Los metasímbolos son caracteres que tienen un significado especial en las expresiones regulares, como los paréntesis, los corchetes, el cuantificador * y el cuantificador +. Los no-metasímbolos son caracteres que no son especiales en las expresiones regulares, como ., [], ( y ), etc.
Metasímbolos
- Los metasímbolos de la siguiente tabla distinguen entre mayúsculas y minúsculas.
- No metasímbolos
- Los caracteres que no son metasímbolos son los siguientes
Expresiones regulares ejemplos
Ejemplo 1
¿Con qué coincide esta expresión regular?
[a-z]
Coincide con todas las letras minúsculas, porque contiene a-z, que es el conjunto de todas las letras minúsculas.
Ejemplo 2
¿Con qué coincide esta expresión regular?
[a-zA-Z]
Coincide con todas las letras mayúsculas, porque contiene A-Z, que es el conjunto de todas las letras mayúsculas.
Ejemplo 3
¿Con qué coincide esta expresión regular?
[0-9]
Coincide con todos los números, porque contiene 0-9, que es el conjunto de todos los dígitos.
Ejemplo 4
¿Con qué coincide esta expresión regular?
[!^$]
Coincide con todos los caracteres que no son alfanuméricos, porque contiene !^$ que es el conjunto de todos los caracteres que no son alfanuméricos.
¿Dónde probar expresiones regulares?
Puedes probar expresiones regulares en nuestra calculadora de expresiones regulares totalmente gratuita en el botón que te dejamos aquí:
Expresiones regulares javascript
Las expresiones regulares (RegExp) son una parte muy útil y potente de JavaScript. El propósito de una RegExp es determinar si un valor de cadena dado es válido, basado en un conjunto de reglas.
Demasiados tutoriales no enseñan realmente cómo escribir expresiones regulares. Simplemente te dan algunos ejemplos, la mayoría de los cuales son desafortunadamente muy difíciles de entender, y luego nunca explican los detalles de cómo funciona la RegExp.
Si usted también se siente frustrado por esto, ¡entonces ha venido al lugar correcto! Hoy, vas a aprender realmente cómo escribir expresiones regulares.
Búsqueda por subcadena
Para comenzar, escribamos una RegExp que requiera que nuestros usuarios ingresen una fecha que contenga este valor “MAR-16-1981”.
Observe que pueden introducir lo que quieran, siempre y cuando el valor contenga MAR-16-1981 en alguna parte del valor. Por ejemplo, esto sería incluso válido con esta expresión TEST-MAR-16-1981-EXTRA.
A continuación se muestra el HTML y el JavaScript de una página web con un formulario que permite a nuestros clientes introducir su fecha de nacimiento.
function validateDateFormat(inputString) {
var rxp = new RegExp(/MAR-16-1981/);
var result = rxp.test(inputString);
si (resultado == false) {
alert(“Formato de fecha no válido”);
}
return result;
}
Tome nota de las siguientes piezas clave de este código:
- Cuando se hace clic en el botón de envío, se llama a nuestra función JavaScript. Si el valor no supera nuestra prueba, mostramos un cuadro emergente de alerta con un mensaje de error. En este caso, la función también devuelve un valor falso. Esto asegura que el formulario no se envíe.
- Observe que estamos utilizando el objeto RegExp JavaScript. Este objeto nos proporciona un método de “prueba” para determinar si el valor pasa nuestras reglas de expresión regular.
Búsqueda de coincidencia exacta
La RegExp anterior permite cualquier valor que contenga MAR-16-1981. A continuación, vamos a ampliar nuestra expresión regular para que sólo permita valores que sean iguales a MAR-16-1981 exactamente. Hay dos cosas que necesitamos añadir a nuestra expresión regular.
La primera es un signo de interrogación ^ al principio de la expresión regular. La segunda es un signo de dólar $ al final de la expresión. El signo ^ requiere que el valor que estamos probando no pueda tener ningún carácter que preceda al valor MAR-16-1981.
El signo de dólar $ requiere que el valor no pueda tener ningún carácter posterior al valor MAR-16-1981. Así es como se ve nuestra expresión regular con estas nuevas reglas.
Esto asegura que el valor introducido debe ser exactamente MAR-16-1981.
/^MAR-16-1981$/
Coincidencia de caracteres
Ya hemos aprendido a validar valores de cadena que contienen una determinada subcadena o son iguales a un determinado valor con una expresión regular.
Sin embargo, para nuestro formulario HTML, probablemente no queramos exigir a nuestros clientes que introduzcan una fecha exacta.
Es más probable que queramos que introduzcan cualquier fecha, siempre que cumpla ciertas restricciones de formato.
Para empezar, vamos a modificar el RegExp para que se puedan introducir tres letras cualesquiera (no sólo “MAR”). También vamos a requerir que estas letras se introduzcan en mayúsculas. Así es como se ve esta regla cuando se agrega a nuestra expresión regular.
/^[A-Z]{3}-16-1981$/
Todo lo que hemos hecho es sustituir “MAR” por [A-Z]{3}, lo que significa que cualquier letra entre la A y la Z puede introducirse 3 veces. Veamos algunas variaciones de las reglas de concordancia de caracteres para conocer otras formas en las que podemos hacer coincidir patrones de caracteres.
La regla anterior sólo permite 3 caracteres en mayúscula. ¿Qué pasa si quiere permitir 3 caracteres que puedan estar en mayúsculas o en minúsculas (es decir, que no distingan entre mayúsculas y minúsculas)? Así es como se vería esa regla en una expresión regular.
/^[A-Za-z]{3}-16-1981$/
A continuación, vamos a modificar nuestra regla para permitir 3 o más caracteres. El cuantificador {3} dice que deben introducirse exactamente 3 caracteres para el mes. Podemos permitir 3 o más caracteres cambiando este cuantificador por {3,}.
/^[A-Za-z]{3,}-16-1981$/
Si queremos permitir uno o más caracteres, podemos utilizar simplemente el cuantificador +.
/^[A-Za-z]+-16-1981$/
Rangos
Hasta ahora, hemos especificado rangos de letras [A-Z] y números [0-9]. Existen varios métodos para escribir rangos dentro de las expresiones regulares.
Puedes especificar un rango de [abc] para que coincida con a o b o c. También puedes especificar un rango de [^abc] para que coincida con cualquier cosa que no sea a o b o c.