2010-10-16 23 views
30

Sono solo un noob quando si tratta di regexp. So che Perl è fantastico con regexp e non conosco molto Perl. Recentemente ho iniziato a imparare JavaScript e ho trovato espressioni regolari per che convalidano gli input dell'utente ... non li ho usati molto.regex Javascript rispetto a regex Perl

In che modo rexxp JavaScript si confronta con Perge regexp? Somiglianze e differenze?
È possibile utilizzare tutte le regexp (s) scritte in JS in Perl e viceversa?
Sintassi simile?

+1

Sono curioso di vedere se qualcuno risponde a questo. So che la funzione di regex di base è la stessa tra Perl e JavaScript (^ ancore a sinistra, $ ancore a destra, \ b per limite di parole, ecc.). Alcune delle funzionalità avanzate possono tuttavia differire, come la corrispondenza non avida e i riferimenti posteriori. – jpsimons

risposta

22

Da ECMAScript 2018 in poi, sono state corrette molte delle regex delle deficienze di JavaScript.

Ciò che ancora manca:

  • JavaScript non dispone di un modo per evitare il backtracking, rendendo le partite finali (usando quantificatori possessivi ++/*+/?+ o atomiche gruppi (?>...)).
  • La corrispondenza del sottogruppo ricorsivo/bilanciato non è supportata.
  • Un'altra cosa (estetica) è che JavaScript non conosce regex verbose, che potrebbero renderli più difficili da leggere.

Oltre a ciò, la sintassi base delle espressioni regolari è molto simile in entrambi gli aromi.

+3

È possibile simulare regex verbali con concatenazione di stringhe. Non è bello come il vero verboso regex, quindi la barriera è più alta per quando lo faresti, ma è comunque un'opzione ed è sicuramente utile in alcune situazioni. –

+0

Le affermazioni di Lookbehind sono state aggiunte in ECMAScript 2018. – Jakob

6

Questo comparison risponderà a tutte le vostre domande.

+4

Tranne che è circa tre anni non aggiornato, dal momento che copre solo Perl 5.8 e molte delle cose in quella lista sono state aggiunte in 5.10. – hobbs

+1

@hobbs - alcuni di noi vivono ancora nel mondo 5.8 :) – DVK

+5

Per essere specifici (ovvero, effettivamente utili), il 5.10 aggiunge i nomi catturati, i riferimenti ai nomi e i "quantificatori possessivi" usando '+', così come alcuni altre cose relative al controllo del backtracking e all'analisi sintattica ricorsiva che non è in quel confronto. – hobbs

5

Un'altra differenza: in JavaScript, non è presente il modificatore s: il punto "." non abbinerà mai un carattere di nuova riga. In sostituzione di ".", La classe di caratteri [\s\S] può essere utilizzata in JavaScript, che funzionerà come /./s in Perl.

+1

oppure utilizzare la classe di caratteri '[^]' – irisjay

+1

Il modificatore 's' è stato aggiunto in ECMAScript 2018. – Jakob