2011-12-20 17 views
11

Las llaves en JavaScript regex se utilizan para denotar cuantificadores. Así que escribiendo¿El manejo de llaves en javascript regex es el mismo en todos los navegadores modernos?

a{2,4} 

coincidirá con aa, aaa y aaaa. Pero si se escribe incorrectamente este cuantificador como esto:

x{1,x} 

que coincidirá con el texto literal "x {1, x}", al menos en Firefox.

¿Este comportamiento es común en los navegadores modernos?

La norma ECMA prohíbe este comportamiento y requiere el escape de las llaves.

(Antecedentes: Tengo que escribir un analizador de expresiones regulares de JavaScript en el trabajo.)

+1

Eww ... Niza de errores! ¿Sucede cuando invocas 'nuevo RegExp()', '//' o ambos? – fge

+8

¿Dónde dice sobre el requisito de escaparse en la especificación? La defición relevante de 'QuantifierPrefix' es' {DecimalDigits, DecimalDigits} ', así que' {1, x} 'no debe interpretarse como un cuantificador porque' x' no es 'DecimalDigit' - por lo tanto, el comportamiento parece consistente con las especificaciones . – pimvdb

+1

'PatternCharacter es SourceCharacter pero no uno de ^ $ \. * +? ( ) [] {} | 'Así que las llaves no pueden ser un carácter de patrón. – Calmarius

Respuesta

5

No sé JavaScript y navegadores, pero este es el comportamiento que habría esperado y que he visto en el pasado en expresiones regulares.

Así que probaron diferentes motores de expresiones regulares en su comportamiento:

  • C#: se comporta de esta manera

  • Perl: se comporta de esta manera

  • Python: se comporta de esta manera

  • PHP: se comporta de esta manera

  • Java: se emite una excepción

Cuestiones relacionadas