2012-09-05 10 views
23

¿Hay alguna buena razón por la que nos falta hoy, y si es así, es resolvable? ¿O es como una de esas cosas que rompería la compatibilidad con versiones anteriores si se presentara?¿JS-regex alguna vez se verá?

+1

JS ya soporta búsqueda hacia delante, no? Preguntar por qué no es compatible con * lookbehind * sigue siendo interesante, por supuesto. –

+0

Cambié solo para estar atento. – haxxerz

+0

Realmente me gustaría saberlo. – haxxerz

Respuesta

19

Encontré un mailing-list thread de 2010 sobre este mismo problema.

Aparentemente, cuando se estaba desarrollando EcmaScript 3, buscaron en Perl las características de expresiones regulares. Waldemar Horwat escribió acerca de por qué mirada detrás no se añadió en esa norma:

La especificación ES3 se basa en lo que se mantuvo estable en el tiempo. Perl tenía experimentando con otras construcciones en expresiones regulares, pero había algo de abandono allí, y no quería ir por características que estaban todavía en flujo.

Más adelante en el hilo, Marc Harter creado a proposal para añadir esta función.

El resto de la discusión fue sobre los detalles particulares de la propuesta ; nadie tenía ninguna razón contra incluyéndolo en el próximo estándar .

Desafortunadamente, la discusión finalizó sin una resolución. Hay una página en la wiki de EcmaScript harmony, pero todo lo que hace es vincular a la propuesta y al hilo de la lista de correo.

por lo que parece que no hay razones evidentes contra adición de la funcionalidad de búsqueda hacia atrás a las expresiones regulares de JavaScript. Sin embargo, también parece ser no más actividad hacia adición de ellos, ya sea - Sospecho que el desarrolladores y diseñadores del lenguaje están distraídos por los cambios mucho más grandes que están planeando para ES 6.

Creo que su mejor opción ahora sería plantear el tema nuevamente en la lista de correo es-discuss. No conozco exactamente las políticas de que figuran en la lista, pero sospecho que la gente estaría bien al menos volviendo a hablar de eso; quizás alguien incluso trabajará hacia obteniendo soporte de referencia en el siguiente estándar.

+0

Woah, ¡excelente respuesta! Gracias. ¿Qué cambios más grandes, específicamente, están preocupados? Me doy cuenta de que vienen grandes cambios, nunca entendí ninguno de ellos donde los he mencionado. – haxxerz

+1

No estoy del todo seguro. He pasado de JavaScript a pastos más verdes durante el año pasado, más o menos ahora. Recuerdo algunas características interesantes, como generadores de estilo Python, proxies, paréntesis opcionales, nueva sintaxis lambda (que implica '#', creo) y probablemente muchas otras cosas también. Dicho esto, no recuerdo qué cosas eran propuestas reales y cuáles solo eran entradas de blog ilusorias: P. [El wiki] (http://wiki.ecmascript.org/doku.php) es un recurso exhaustivo y bastante accesible para ver qué ideas están considerando las personas de estandarización. –

+1

No parece haber una búsqueda de la lista de correo ['es-discuss'] (https://mail.mozilla.org/pipermail/es-discuss/). Entonces me pregunto si alguien les mencionó ese tema nuevamente, como sugirió Tikhon. @haxxerz: ¿alguna vez publicaste algo allí? –

0

El ES6 Spec está finalizado ahora (junio de 2015) y parece que no lo hizo, ¡por desgracia! :(

+0

¡Es una verdadera lástima! – zumek

2

No estaba cerca en ese momento, así que no sé por qué lookbehind no estaba allí originalmente, pero ha habido algo de actividad posterior a ES6 aquí. Escribí una implementación de .Net style lookbehind para Fletch , que es una implementación de Dart que (como dart2js y DartVM) tiene expresiones regulares compatibles con JS.

que se portó a V8 como una característica experimental, y el puerto V8 a su vez se transfirió a Firefox. En V8 se activa con el indicador --harmony-regexp-lookbehind. En el momento de escribir esto, no hay interfaz de usuario para activarlo.

Puedes jugar con una versión de la implementación de Fletch en https://dartpad.dartlang.org/8feea83c01ab767acdf1 y puedes probarla.búsqueda hacia atrás al estilo de red en http://www.regexplanet.com/advanced/dotnet/index.html

A diferencia de Perl y Python y la mayoría de los otros motores de expresiones regulares, se trata de una aplicación sin restricciones de búsqueda hacia atrás: Todas las funciones permitidas en JS expresiones regulares también trabajar en los lookbehinds, por ejemplo, * y +,? y {}, lookbehinds-inside-lookbehinds y look-aheads-inside-lookbehinds. Espero que alguien pueda encontrarlo para ayudar a estandarizarlo. Si, en un año, ECMAScript aún no tiene un respaldo subyacente, es probable que no se haya encontrado a nadie que escriba el capítulo en el estándar.

+0

¿De dónde sacaste la implementación de Dart? – refi64

+0

Escribí la implementación de expresiones regulares de Dart en Dartino (anteriormente llamada Fletch), y también escribí el soporte lookbehind. –

+0

Debe cargar solo el código de expresiones regulares a GitHub o algo así. ¡Sería increíble contar con un respaldo detrás de Dage en las expresiones regulares de Dart antes que los demás! – refi64

Cuestiones relacionadas