2012-01-09 9 views
9

Aparte de Javascript de ^ y $ siendo equivalente a Ruby de \A y \z, ¿qué otras diferencias sutiles hay entre los dos motores de expresiones regulares?Ruby 1.9 y Javascript expresión regular

Busco diferencias sutiles en la misma expresión regular puede comportarse de manera diferente, por ejemplo /^abc$/ coincidan con esto en Rubí:

123 
abc 
def 

Pero no va a coincidir en Javascript.

+1

También hay diferencias entre versiones particulares de Ruby. Ruby 1.8 no admite aserciones de mirar hacia atrás, mientras que Ruby 1.9 sí lo hace. – tybro0103

+0

@ tybro0103 Vaya, debería haber especificado qué versión. –

Respuesta

17

Funciones compatibles con Rubí, pero no JavaScript:

  • \a (campana)
  • \e (de escape)
  • \A (inicio de la cadena)
  • \Z (final de la cadena, antes de la final salto de línea)
  • \z (final de la cadena)
  • adelante hace referencia a \1 través \9
  • referencias hacia atrás a grupos fallidos también fallará
  • (?>regex) (grupo atómico)
  • \G (inicio del intento de coincidencia)
  • (?#comment)
  • sintaxis gratuito espaciado apoyado
  • clase de caracteres es un solo token
  • # inicia un comentario
  • [:alpha:] clase
  • (?i) (mayúsculas y minúsculas) de carácter POSIX (JavaScript apoya /i solamente)
  • (?s) (punto coincide con saltos de línea) (?m)
  • (?m) (^ y $ partido en saltos de línea) (/m sólo en JavaScript)
  • (?x) (modo de libre espaciado)
  • (?-ismxn) (desactivar el modo de modificadores)
  • (modo modificadores de la zona para grupo)

Funciones compatibles con JavaScript, pero no Ruby:

  • \cA través \cZ (carácter de control)
  • \ca través \cz (carácter de control)
  • \u0000 través \uFFFF (caracteres Unicode)

Fuente:

+2

No estoy seguro de cuán actualizada está esa página, pero en ruby ​​1.9, las secuencias '\ uXXXX' son compatibles con el motor de expresiones regulares. – d11wtq

+0

Nota: * Última actualización de la página: 24 de marzo de 2011 * –

+0

A partir de Ruby v2.2, hay algunas características más de Ruby regex que no están disponibles en JS: (? (A) b | c) condicionales; \ p {sc} propiedades unicode; ++ cuantificadores posesivos; [a [^ b]] establecer el anidamiento; [a-x && c-z] establece la intersección; \ h tipos de hex; \ k referencias posteriores; \ g llamadas de subexpresión; (? <=, (? Janosch

Cuestiones relacionadas