2011-12-20 14 views
11

Le parentesi graffe nella regex JavaScript vengono utilizzate per indicare i quantificatori. Quindi scrivereLa gestione delle parentesi graffe in regex javascript è la stessa in tutti i browser moderni?

a{2,4} 

corrisponderà aa, aaa e aaaa. Ma se si digitano questo quantifier come questo:

x{1,x} 

Sarà corrispondere al testo letterale "x {1, x}", almeno in Firefox.

Questo comportamento è comune ai browser moderni?

Lo standard ECMA vieta questo comportamento e richiede l'escaping delle parentesi.

(Background: devo scrivere un parser per javascript regex sul posto di lavoro.)

+1

Eww ... Nizza bug! Succede quando invochi 'new RegExp()', '//' o entrambi? – fge

+8

Dove dice il requisito dell'evasione dalle specifiche? La defizione rilevante di 'QuantifierPrefix' è' {DecimalDigits, DecimalDigits} ', quindi' {1, x} 'non deve essere interpretato come quantificatore perché' x' non è un 'DecimalDigit' - quindi il comportamento sembra coerente con le specifiche . – pimvdb

+1

'PatternCharacter è SourceCharacter ma non uno di ^ $ \. * +? ( ) [] {} | 'Quindi le parentesi graffe non possono essere un carattere di motivo. – Calmarius

risposta

5

Non so per JavaScript e browser, ma questo è il comportamento mi sarei aspettato e che ho visto nel passato in espressioni regolari.

Così ho provato diversi motori di regex sul loro comportamento:

  • C#: si comporta in questo modo

  • Perl: si comporta in questo modo

  • Python: si comporta in questo modo

  • PHP: si comporta in questo modo

  • Java: genera un'eccezione

Problemi correlati