Las expresiones regulares descomunales pueden ser bastante lentas y tener mucha memoria. Lo sé, porque he creado uno. Puede tokenizar lo que no debe ser tokenizado por una expresión regular. :-) si quieres un enlace ... Ahora ... nunca he comparado las expresiones regulares "pequeñas", así que no sé su velocidad. Seguramente son compacto para escribir.
Ah, me estaba olvidando, los regexes son The Evil. Su principal problema es que son como un martillo y cuando los tienes, tratas de hacer que todos los problemas sean como un clavo. Entonces su problema principal está en el usuario (el programador).
Primera limitación "grande": Javascript implementa solo un subconjunto de ellas, sin compatibilidad con Unicode. Normalmente, el idioma que usa en el servidor tiene una implementación más completa, por lo que se limita por js. Incluso las implementaciones bastante completas como la de .NET tienen grandes límites: no admiten pares sustitutos ni soporte para caracteres "compuestos" (caracteres que usan marcas combinadas). Pero, como siempre, el problema está en el programador. ¿Cuántos programadores que conocen Unicode conocen las complejidades de Unicode, de los varios conjuntos de dígitos, de los signos diacríticos?
Segunda "gran" limitación: mantenibilidad. Son complejos e ilegibles cuando están escritos. ¿Pero meses después? ¡Ellos empeoran! Y si tiene que capacitar a un nuevo programador, ahora tiene que aprender un idioma más: regex.
Tercera "gran" limitación: se esconden demasiado. Usted ve \d\s\d
. ¿Qué significa? un dígito, un espacio y un dígito? Seguramente. Pero tanto \d
como \s
en .NET Regexes "esconden" un micromundo. \d
"coincide" con cualquier dígito no europeo (y hay muchos muchos en Unicode). \s
"coincide" con tantos espacios esotéricos de los que ni siquiera sé el nombre ... Ni siquiera quiero pensar en ello. Son como icebergs. Solo 1/8 está fuera del agua, mientras que 7/8 está oculto. Pero es ese 7/8 que probablemente te matará.
Realmente necesita especificar el motor de expresiones regulares que está utilizando, ya que cada uno tiene límites diferentes. Algunos han ido tan lejos como para permitir algunas expresiones regulares similares a la gramática. Mirando las respuestas de Tchrist (Tom Christiansen) aquí en SO, puedes hacerte una idea de la potencia que han alcanzado algunos motores regex. – ninjalj