Admin
 
 
Logo DIPLOX
Expresiones regulares avanzado
Volver Por teuton
  
Miercoles, 07/10/2009
Negar un carácter [^a]. Negar un conjunto de caracteres [^aeiou] (negamos vocales = consonantes).

Negative lookahead: q(?!u) --> todas las q no seguidas por una u
Positive lookahead: q(?=u) --> todas las q seguidas de una u
Incluso se puede hacer (?=(regex)), metiendo una regex entre paréntesis

Negative lookbehind: (?<!u)q --> todas las q no precedidas por una u
Positive lookbehind: (?<=u)q --> todas las q precedidas por u

Pero todas las lookbehind me dan error en sintaxis de expresion regular y es porqué javascript no las soporta

Voy a plantear unos ejemplos:
Tengo la palabra murcielago (así, sin tildes para simplificar). Quiero coger todas las consonantes seguidas de vocal:
[^aeiou][aeiou] lo conseguiría --> mu,ci,la,go

Ahora quiero coger sólo la consonante seguida de vocal, sin guardar la vocal:
[^aeiou](?=[aeiou]) --> m,c,l,g

Un apunte para buscar hacia delante. Si tenemos farola y fabola y queremos fichar todas las fa seguidas, por ejemplo, de una consonante y después una o, no podemos hacer:
fa(?=[^aeiou])o

Para entender esto hace falta saber cómo trabaja el motor de regex. Esto es porque la expresión regular empieza buscando fa, y encuentra en las dos fa.

Después corrobora que está seguida de una consonante, y VE (no encuentra) una r o una b, según el caso. Seguidamente, después de fa, busca una o inexistente en nuestra cadena. Luego no encuentra en ninguno de los dos casos.

Nuestra expresión regular resulta imposible, ya que mira si despues de fa hay una consonante, y después si fa está seguida de una o, que no es consonante.

Viene a ser el equivalente de escribir if(false), que nunca se va a cumplir.

Para que funcione y encuentre fa+consonante+o tenemos que hacer algo asi:
fa(?=[^aeiou])[^aeiou]o

añadiendo después del lookahead lo que estabamos mirando, para buscarlo. La verdad es que me parece un poco estúpido, porqué viene a ser lo mismo que
fa[^aeiou]o


Volver Por teuton