¿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á?
Respuesta
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.
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
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. –
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í? –
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.
¿De dónde sacaste la implementación de Dart? – refi64
Escribí la implementación de expresiones regulares de Dart en Dartino (anteriormente llamada Fletch), y también escribí el soporte lookbehind. –
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
Lookbehinds (así como los grupos de captura con nombre) son proposed to be added to ECMAScript.
Actualmente hay un borrador de especificación para él, el grupo TC39 parece ser positivo en esa propuesta y Chrome has already implemented it (detrás de una bandera) y Firefox may follow soon. También hay un request to uplift the proposal to the next stage.
Una gran noticia: v8 ha conseguido el js de búsqueda hacia atrás: http://v8project.blogspot.in/2016/02/regexp-lookbehind-assertions.html
Esto ha hecho su camino en nodejs v6.0.0 + (detrás de la bandera --harmony): https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG_V6.md#2016-04-26-version-600-current-jasnell
- 1. ¿Se desborda BigInteger alguna vez?
- 2. ¿Es necesario > alguna vez?
- 3. ¿Alguna vez ha usado ngen.exe?
- 4. Can/tmp en Linux alguna vez se llenan?
- 5. ¿Se ha admitido el selector :: - webkit-selection alguna vez?
- 6. ¿Por qué alguna vez scrollTop/scrollLeft no se puede escribir?
- 7. ¿Alguna vez se destruye el contexto de la aplicación Android?
- 8. ¿Alguna vez se considera visitado el correo href?
- 9. ¿Alguna vez se llama al método de actualización?
- 10. cómo saber si se usa un índice alguna vez
- 11. ¿Alguna vez se utilizará en lugar de pseq?
- 12. ¿Alguna vez el controlador se ejecuta más de una vez en Jmeter?
- 13. ¿Los ensamblados .NET alguna vez cambian?
- 14. ¿Alguna vez ha bloqueado el compilador?
- 15. ¿Alguna vez alguien usa el Control Ribbon?
- 16. ¿Podría random.randint (1,10) alguna vez devolver 11?
- 17. ¿Alguna vez OCaml ha copiado bloques personalizados?
- 18. Can String.Split() alguna vez devuelve nulo? (.net)
- 19. Omitir listas: ¿alguna vez las usaste?
- 20. ¿Cuándo, si alguna vez, debemos usar const?
- 21. ¿Recibió Delphi alguna vez por cada ciclo?
- 22. Puede Object.GetType() alguna vez devolver nulo?
- 23. ¿Es cero alguna vez un identificador válido?
- 24. ¿Alguna vez log4net bloqueará la aplicación?
- 25. ¿Cómo desarrollar la interfaz de usuario que se verá como nativa de Android usando jQuery-mobile?
- 26. Git: Mostrar contenido del archivo como se verá como después de cometer
- 27. ¿Cómo trazar una matriz de cero uno que se verá como dispersión?
- 28. ¿Por qué typeof (Foo) alguna vez devolvería nulo?
- 29. ¿Alguna vez podremos eliminar un archivo abierto en Windows?
- 30. ¿Alguna vez ha usado PhantomReference en algún proyecto?
JS ya soporta búsqueda hacia delante, no? Preguntar por qué no es compatible con * lookbehind * sigue siendo interesante, por supuesto. –
Cambié solo para estar atento. – haxxerz
Realmente me gustaría saberlo. – haxxerz