miércoles, 17 de octubre de 2012

12 - Expresiones Regulares en Javascript



Interesante: Vídeo Tutorial de Javascript, aprende a programar Javascript desde cero.

Las expresiones regulares constituyen un mecanismo bastante potente para realizar manipulaciones de cadenas de texto. El proceso para el que se usan estas expresiones, presente en el mundo el UNIX y el lenguaje Perl, es el de buscar y/o sustituir una subcadena de texto dentro de otra cadena. En principio esto puede hacerse usando los métodos del objeto string, pero el problema surge cuando no tenemos una subcadena fija y concreta sino que queremos buscar un texto que responda a un cierto esquema, como por ejemplo: buscar aquellas palabras que comienzan con http: y finalizan con una \, o buscar palabras que contengan una serie de números consecutivos, etc.; es en estos casos cuando las expresiones regulares muestran toda su potencia. La subcadena que buscamos en el texto es lo que se llama un patrón y se construye encerrando entre dos barras inclinadas ( / ) una serie de caracteres normales y símbolos especiales llamados comodines o metacaracteres, (algo parecido a la orden dir *.bat usada en el DOS cuando queríamos listar los ficheros con extensión bat). Este patrón es una descripción del texto que se está buscando y JavaScript encontrará las subcadenas que concuerdan con ese patrón o definición. Las expresiones regulares se usan con el objeto Regular Expresion y también dentro de los métodos String.match, String.replace, String.search y String.split.

En la tabla que sigue se muestran los caracteres comodín usados para crear los patrones y su significado, junto a un pequeño ejemplo de su utilización.

\ -> Marca de carácter especial -> /\$ftp/ -> Busca la palabra $ftp
 
^ -> Comienzo de una línea -> /^-/ -> Líneas que comienzan por -
 
$ -> Final de una línea -> /s$/ -> Líneas que terminan por s
 
. -> Cualquier carácter (menos saltos de línea) -> /\b.\b/ -> Palabras de una sola letra
 
| -> Indica opciones -> /(L|l|f)ocal/ -> Busca Local, local o focal
 
() -> Agrupar caracteres -> /(vocal)/ -> Busca vocal
 
[] -> Conjunto de caracteres opcionales -> /escrib[aoe]/ -> Vale escriba, escribo, escribe


La tabla que sigue describe los modificadores que se pueden usar con los caracteres que forman el patrón. Cada modificador actúa sobre el carácter o el paréntesis inmediatamente anterior.

* -> Repetir 0 o más veces -> /1*234/ -> valen 234,1234, 11234 ...
 
+ -> Repetir 1 o más veces -> /a*mar/ -> valen amar, aamar, aaamar ...
 
? -> 1 o 0 veces -> /a?mar/ -> valen amar, mar.
 
{n} -> Exactamente n veces -> /p{2}sado/ -> vale ppsado.
 {n,} -> Al menos n veces -> /(m){2}ala/ -> vale mmala, mmmala ...
 {m,n} -> entre m y n veces -> /tal{1,3}a/ -> vale tala, talla, tallla.

Los siguientes son caracteres especiales o metacaracteres para indicar caracteres de texto no imprimibles, como puedan ser el fín de línea o un tabulador, o grupos predefinidos de caracteres (alfabéticos, numéricos, etc...)

\b -> Principio o final de la palabra -> /\bver\b/ -> Encuentra ver en "ver de", pero no en "verde"
 
\B -> Frontera entre no-palabras -> /\Bver\B/ -> Empareja ver con "Valverde" pero no con "verde"
 
\d -> Un dígito -> /[A-Z]\d -> No falla en "A4"
 
\D -> Alfabético (no dígito) -> /[A-Z]\D/ -> Fallaría en "A4"
 
\O -> Carácter nulo
 
\t -> Carácter ASCII 9 (tabulador)
 
\f -> Salto de página
 
\n -> Salto de línea
 
\w -> Cualquier alfanumérico, [a-zA-Z0-9_] -> /\w+/ -> Encuentra frase en "frase." pero no el . (punto)
 
\W -> Opuesto a \w [^a-zA-Z0-9_] -> /\W/ -> Hallaría sólo el punto (.)
 
\s -> Carácter tipo espacio (como tab) -> /\sSi\s/ -> Encuentra Si en "Digo Si ", pero no en "Digo Siéntate"
 
\S -> Opuesto a \s
 
\cX -> Carácter de control X -> \c9 -> El tabulador
 
\oNN -> Carácter octal NN
 
\xhh -> El Hexadecimal hh -> /\x41/ -> Encuentra la A (ASCII Hex41) en la cadena "letra A"