C'è qualche buona ragione per cui ci manca oggi, e se è così, è risolvibile? O è come una di quelle cose che rompono la compatibilità con le versioni precedenti se introdotte?JS-regex si guarderà mai dietro?
risposta
Ho trovato uno mailing-list thread dal 2010 su questo stesso problema.
Apparentemente, quando EcmaScript 3 è stato sviluppato, hanno cercato Perl per le funzionalità di regexp. Waldemar Horwat ha scritto sul perché look-dietro non è stato aggiunto a quello standard:
Le specifiche ES3 è basata su quello che era stabile al momento. Perl aveva sperimentato con altri costrutti in regexp, ma c'era alcuni churn lì, e non volevo andare per le funzionalità che erano ancora in flusso.
tardi nel filo, Marc Harter creato a proposal per aggiungere questa funzione.
Il resto della discussione riguardava i dettagli particolari della proposta ; nessuno aveva dei motivi contro incluso nel prossimo standard .
Sfortunatamente, la discussione si è conclusa senza una risoluzione. C'è una pagina sul wiki di armonia di EcmaScript, ma tutto ciò che fa è il collegamento alla proposta e il thread di mailing-list.
Quindi sembra che non ci siano motivi evidenti contro aggiunta di lookbehind regexps di JavaScript. Tuttavia, ci sembra anche essere non più attività verso aggiungendoli o - Ho il sospetto che il sviluppatori e progettisti di linguaggi sono distratti da cambiamenti molto più grandi stanno progettando per ES 6.
Credo che la soluzione migliore ora sarebbe di riportare l'argomento sulla mailing-list di es-discussion . Non conosco le politiche esatte di che elencano in particolare, ma sospetto che le persone andrebbero bene almeno a a parlarne di nuovo; forse qualcuno lavorerà anche verso lo ottenendo un supporto di ricerca nel prossimo standard.
Woah, ottima risposta! Grazie. Quali cambiamenti più grandi, in particolare, sono preoccupati? Mi rendo conto che ci sono enormi cambiamenti in arrivo, non ho mai veramente capito nessuno di loro dove li ho visti menzionati. – haxxerz
Non sono del tutto sicuro: mi sono spostato da JavaScript a pascoli più verdi da un anno a questa parte. Ricordo alcune caratteristiche interessanti come i generatori in stile Python, i proxy, le parentesi opzionali, la nuova sintassi lambda (che implica '#', penso) e probabilmente anche un sacco di altre cose. Detto questo, non ricordo quali fossero le proposte effettive e che erano solo dei post del blog desiderosi: P. [Il wiki] (http://wiki.ecmascript.org/doku.php) è una risorsa completa e abbastanza accessibile per vedere quali idee stanno prendendo in considerazione le persone di standardizzazione. –
Sembra che non ci sia una ricerca per la mailing list ['es-discuss'] (https://mail.mozilla.org/pipermail/es-discuss/). Quindi mi chiedo se qualcuno abbia menzionato di nuovo quell'argomento come suggerito da Tikhon. @haxxerz: hai mai postato qualcosa lì? –
Non ero in giro in quel momento, quindi non so perché il lookbehind non era originariamente lì, ma c'è stata qualche attività post-ES6 qui. Ho scritto un'implementazione di .net lookbehind per Fletch , che è un'implementazione di Dart che (come dart2js e DartVM) ha espressioni regolari compatibili con JS
Questo è stato convertito in V8 come funzione sperimentale e la porta V8 è stata a sua volta convertita in Firefox. con il flag --harmony-regexp-lookbehind. Al momento della scrittura non c'è interfaccia utente per attivarlo
Puoi giocare con una versione dell'implementazione Fletch al https://dartpad.dartlang.org/8feea83c01ab767acdf1 e puoi provarlo.Net-style lookbehind a http://www.regexplanet.com/advanced/dotnet/index.html
A differenza di perl e python e della maggior parte degli altri motori regexp, questa è un'implementazione senza restrizioni di lookbehind: tutte le funzionalità consentite nelle espressioni regolari JS funzionano anche nelle schermate, ad esempio * e +,? e {}, lookbehinds-inside-lookbehinds e look-ahead-inside-lookbehinds. Spero che qualcuno possa essere trovato per aiutarlo a farlo diventare standard. Se, in un anno, ECMAScript non ha ancora alcun supporto di ricerca, la ragione è probabilmente che nessuno potrebbe trovare il capitolo nello standard.
Da dove hai preso l'implementazione Dart? – refi64
Ho scritto l'implementazione regexp di Dart-language in Dartino (precedentemente chiamato Fletch), e ho anche scritto il supporto lookbehind. –
Dovresti caricare completamente solo il codice regex su GitHub o qualcosa del genere. Sarebbe stupefacente avere un supporto dietro l'aspetto di Dart regexing davanti a tutti gli altri! – refi64
Lookbehind (e gruppi di acquisizione con nome) sono proposed to be added to ECMAScript.
Attualmente è disponibile una bozza di specifica, il gruppo TC39 sembra essere positivo su tale proposta e Chrome has already implemented it (dietro a una bandiera) e Firefox may follow soon. C'è anche un request to uplift the proposal to the next stage.
una grande notizia: V8 ha ottenuto il js lookbehind: http://v8project.blogspot.in/2016/02/regexp-lookbehind-assertions.html
Questo ha reso la sua strada in nodejs v6.0.0 + (dietro la bandiera --harmony): https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG_V6.md#2016-04-26-version-600-current-jasnell
JS supporta già lookahead, non è vero? Chiedere perché non supporta * lookbehind * è ancora interessante, ovviamente. –
Modificato solo per il look. – haxxerz
Mi piacerebbe davvero sapere, però. – haxxerz