Bueno, rebuscando he encontrado este mensaje para el que ya encontré respuesta en su día:
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
a secas, por lo menos eso pienso. Si alguien me lo puede verificar...
Y las condicionales if then else de las expresiones regulares tampoco son aceptadas, dan error en sintaxis.
.. y eso es todo lo que sé hasta el momento...