2010-10-16 25 views
30

No soy más que un novato cuando se trata de expresiones regulares. Sé que Perl es increíble con expresiones regulares y no sé mucho de Perl. Recientemente comenzó a aprender JavaScript y se encontró con expresiones regulares para validando las entradas de los usuarios ... no las he usado demasiado.Javascript regex en comparación con Perl regex

¿Cómo se compara JavaScript regexp con Perl regexp? ¿Similitudes y diferencias?
¿Se pueden usar todas las expresiones regulares escritas en JS en Perl y viceversa?
¿Sintaxis similar?

+1

Tengo curiosidad por ver si alguien responde esto. Sé que la característica de expresión regular básica es la misma entre Perl y JavaScript (^ anclajes a la izquierda, $ anclajes a la derecha, \ b para límite de palabra, etc.). Algunas de las funciones avanzadas pueden diferir, como la coincidencia no codiciosa y las referencias anteriores. – jpsimons

Respuesta

22

Desde ECMAScript 2018 en adelante, se han corregido muchas de las deficiencias de expresiones regulares de JavaScript.

Lo que aún falta:

  • JavaScript no tiene una forma de evitar el retroceso al hacer partidos finales (utilizando cuantificadores posesivos ++/*+/?+ o grupos atómicos (?>...)).
  • La coincidencia de subgrupos recursiva/balanceada no es compatible.
  • Otra cosa (cosmética) es que JavaScript no conoce las expresiones expresas detalladas, lo que puede dificultar su lectura.

Aparte de eso, la sintaxis básica de expresiones regulares es muy similar en ambos sabores.

+3

Puede falsificar expresiones regulares con la concatenación de cadenas. No es tan agradable como expresiones verdaderas verbose, por lo que la barrera es mayor para cuando lo haría, pero sigue siendo una opción y definitivamente vale la pena en algunas situaciones. –

+0

Las aserciones Lookbehind se han agregado en ECMAScript 2018. – Jakob

6

Este comparison responderá a todas sus consultas.

+4

Excepto por tres años, ya que solo cubre Perl 5.8, y varias de las cosas en esa lista se agregaron en 5.10. – hobbs

+1

@hobbs: algunos de nosotros todavía vivimos en el mundo 5.8 :) – DVK

+5

Para ser específico (es decir, realmente útil), 5.10 agrega capturas con nombre, denominadas referencias atrás, y los "cuantificadores posesivos" usando '+', así como algunos otras cosas relacionadas con el control de retroceso y el análisis descendente recursivo que no está en esa comparación. – hobbs

5

Otra diferencia: en JavaScript, no existe el modificador s: El punto "." nunca coincidirá con un carácter de nueva línea. Como reemplazo de ".", La clase de caracteres [\s\S] se puede usar en JavaScript, que funcionará como /./s en Perl.

+1

o utiliza la clase de caracteres '[^]' – irisjay

+1

El modificador 's' se ha agregado en ECMAScript 2018. – Jakob