jueves, 27 de septiembre de 2012

Uso de expresiones regulares

Si no habías escuchado nunca antes el significado de una expresión regular... puede que pienses en voz baja contigo mismo y digas... no sé que es, pero tiene que ser una expresión que no sea ni muy buena ni tampoco muy mala... sino regular... ¿cierto? pues no! aunque a primera vista así lo parezca, en realidad no es así.

Las expresiones regulares, también llamadas regex, patrones o regular expressions, para aquellos que se manejan con el idioma de Shakespeare, sin entrar mucho en el tema de los autómatas, podríamos decir que son una potente herramienta que dado un determinado texto, nos permite "machearlo" o contrastarlo con determinados patrones, éstos patrones serán lo que a nosotros nos interese machear. Son muy óptimas, rápidas de procesar y ayudan a simplificar mucho el código; aunque al principio resulten difíciles de leer, marcan un antes y un después. Es una de las cosas que distingue a un hombre de un niño xD.

Para ampliar más la información, una página que he encontrado muy buena es la de El blog de Analítica Web de Paula Sánchez, que a su vez, recomienda acceder al link de google, donde se explican las expresiones regulares de forma bastante sencilla, y ésta otra web, de Encyclopedia of Regular Expresions for SEO, con muy buenos ejemplos. Para enfocarse en JavaScript, una web muy buena es la de Mozilla Developer Network.

expresiones regularesExiste infinidad de aplicaciones online que nos permiten testear nuestas expresiones regulares, entre otras:
- RegExr
- Online Regular Expression Tester 
- http://www.txt2re.com/ Herramienta online que genera expresiones regulares en distintos lenguajes.
- Regex Hero - Para generar expresiones en .NET.
- Mastering Regular Expressions
- http://regexlib.com/ Podrás encontrar un amplio listado de expresiones regulares ya hechas.


 
Chuletario:

Caracteres comodín usados para crear los patrones
\ Marca de carácter especial
^ Comienzo de una línea
$ Final de una línea
. Cualquier carácter (excepto salto de línea)
| Indica opciones
( ) Agrupar caracteres
[] Conjunto de caracteres opcionales

Modificadores que pueden usarse con los caracteres que forman el patrón
* Repetir 0 o más veces
? 0 o 1 vez
{n} Exactamente n veces
{n,} Al menos n veces
{m,n} Entre m y n veces
\w Un carácter [a-zA-Z0-9_]
\W No es ni carácter, ni núm ni guión bajo
\b Marca el inicio y final de una palabra



Caracteres especiales o metacaracteres para indicar caracteres de texto no imprimibles
\b Principio o final de palabra
\B Frontera entre no-palabras
\d Un dígito
\D Alfabético (no dígito)
\w Cualquier alfanumérico [a-zA-Z0-9_]
\W Opuesto a \w ([^a-zA-Z0-9_])
\O Carácter nulo
\t Tabulador, caracter ASCII 9
\f salto de página
\n Salto de línea
\s Carácter tipo espacio (como tab)
\S Opuesto a \s
\cX Carácter de control X
\oNN Carácter octal NN
\xHH Carácter hexadecimal HH

Variables especiales
$& El texto que macheado
$` El texto que está a la izquierda de lo macheado
$' El texto que está a la derecha de lo macheado
$1,$2,$3,.. Los textos macheados por los paréntesis
$+ Copia del $1, $2, $3, .. con el número más alto
@- Desplazamientos de las cadenas que machean en $1, $2, $3, ..
@+ Desplazamientos de los finales de las subcadenas en $1, $2, $3, ..
$#- El índice del último paréntesis que se macheó
$#+ El índice del último paréntesis en la última expresión regular

Abreviaturas
\d  [0-9]
\D  [^0-9]
\w  [a-zA-Z0-9_]
\W  [^a-zA-Z0-9_]
\s  [ \t\n\r\f]
\S  [^ \t\n\r\f]

Modificadores
e  Evaluar, evalua el lado derecho de una sustitución como una expresión
g  Global, encuentra todas las ocurrencias
i  Ignorar, ignora las mayúsculas y minúsculas, no hace distinción
m  Multilínea, ^ y $ machean con \n internos
o  Optimizar, compila solo una vez
s  ^ y $ ignoran \n pero . machea con \n
x  eXtendida, permite comentarios


Abajo dejo unos links que he encontrado, a modo de chuleta o cheatsheet, que viene siempre bien tenerla a mano a la hora de trabajar con las expresiones regulares.
HTML (online version)
PDF, 648Kb
PNG, 78Kb