Las expresiones regulares permiten la búsqueda de patrones complejos dentro de una cadena. Existen diversas maneras de definirlos en distintos lenguajes pero las bases son las mismas en todos. Gracias a Dios, en esta ocasión tanto Netscape como Microsoft incorporaron lo mismo en sus navegadores versión 4, basándose en la implementación de Perl. Vamos a explicarlo poco a poco y con ejemplos para no perderse porque es dificilillo:
/pepe/
Al aplicar este patrón en una búsqueda, devolverá verdadero si la cadena contiene pepe. En la jerga, esto significa que el patrón se "ajusta" a la cadena. El de arriba es el patrón más sencillo de todos, claro. Poco útil, ya que para esto se pueden utilizar las funciones de cadenas ya estudiadas. Los patrones pueden, tambien, dividirse en una o más ramas, separadas por el carácter "|". Un cadena se ajusta al patrón cuando contiene cualquiera de sus ramas.
/pepe|[hqw]/
En este caso, la cadena se ajustará si contiene a pepe o tiene cualquiera de los caracteres incluidos dentro de los corchetes. Los corchetes definen, por tanto, conjuntos de caracteres. Si se incluye dentro de ellos un guión podremos definir rangos de caracteres.
/[0-9]/
A este patrón se ajustarán todas las cadenas que se contengan dígitos. Si queremos incluir el guión dentro del conjunto de caracteres, podemos ponerlo al final del mismo ([0-9-]) o ponerlo detrás del carácter de escape (estos caracteres sirven para describir caracteres especiales), que en este caso será \, como en las cadenas normales (por tanto, el patrón sería /[\-0-9]/). En los casos más habituales de conjuntos podemos utilizar una de las siguientes clases de caracteres:
Un conjunto de caracteres o un caracter normal puede ir seguido de un cuantificador que indique el número de veces que debe encontrarse dicho conjunto de forma consecutiva para que la cadena se ajuste al patrón.
Además existen otros caracteres especiales importantes (además del guión... y de las barras):
Estos dos últimos caracteres nos permiten comprobar que una cadena se ajuste exactamente al patrón, en lugar de comprobar si lo contiene. Así, por ejemplo, si queremos distinguir si una cadena que nos dan es una dirección web válida podríamos ver si se ajusta al siguiente patrón:
/^http[s]?://\w[\.\w]+$/
Es posible que estéis perplejos. No hay que preocuparse. Las expresiones regulares son muy difíciles. Ni yo ni nadie que conozca presume de controlarlas sin problemas. Las expresiones regulares son algo que te sale cuando estás inspirado y a veces ni aún así. A veces es más recomendable buscar en Internet a ver si alguien ha hecho antes la expresión que necesitas.
Por último, debemos definir los modificadores. Estos se incluyen al final del todo, después de la última barra:
Se pueden poner los dos, pero deberemos poner la g antes de la i.
Vamos a ver por fin cómo utilizamos en el mundo real las expresiones regulares. Hay dos maneras más o menos equivalentes:
var reg = /^http[s]?://\w[\.\w]+$/i
O declarando explícitamente el objeto:
var reg = new RegExp("^http[s]?://\w[\.\w]+$", "i");
Casi siempre utilizaremos los métodos de String para efectuar búsquedas y reemplazos. Los métodos más interesantes son:
replace(/Un Dos/gi, "Hola")
Este patrón reemplaza todas las ocurrencias de Un Dos por Hola. Se pueden utilizar paréntesis para poder emplear partes del patrón en el reemplazo:
replace(/(Un) (Dos)/gi, "$2 $1")
En este caso reemplarará todas las ocurrencias de Un Dos por Dos Un. Es decir, a lo contenido en el primer paréntesis le corresponde $1 y así sucesivamente.