Подтвердить что ты не робот

Будет ли JS-regex когда-либо появляться?

Есть ли какая-то веская причина, почему мы этого не имеем сегодня, и если да, то это разрешимая? Или это похоже на одну из тех вещей, которые нарушали бы обратную совместимость, если они были представлены?

4b9b3361

Ответ 1

Я нашел список рассылки от 2010 года по этой самой проблеме.

По-видимому, когда разрабатывался EcmaScript 3, они смотрели на Perl для функций regexp. Вальдемар Хорват писал о том, почему не был добавлен в этот стандарт:

Спецификация ES3 была основана на том, что было стабильным в то время. Перл экспериментировал с другими конструкциями в регулярных выражениях, но некоторые отточенные там, и я не хотел идти за функциями, которые были все еще в потоке.

Позже в потоке Марк Хартер создал предложение для добавления эта функция.

Остальная часть обсуждения была посвящена конкретным деталям предложение; никто не имел никаких оснований против включения его в следующий стандарт.

К сожалению, обсуждение закончилось без разрешения. Eсть на странице EcmaScript wiki, но все, что она делает, это ссылка на предложение и поток рассылки.

Итак, кажется, что нет никаких вопиющих причин против добавления lookbehind функциональность JavaScript regexps. Однако, похоже, больше нет активности по их добавлению - я подозреваю, что разработчики и разработчики языка отвлекаются гораздо большими изменениями они планируют ES 6.

Я думаю, что теперь ваш лучший вариант - довести тему до es-обсудить рассылку снова. Я не знаю, какие именно политики это список, в частности, но я подозреваю, что люди будут по крайней мере снова об этом говорить; возможно, кто-то даже будет работать в направлении получив поддержку lookbehind в следующем стандарте.

Ответ 2

Lookbehinds (а также названные группы захвата) предлагается добавить в ECMAScript.

В настоящее время для этого есть проект спецификации, группа TC39, похоже, позитивна в этом предложении и Chrome уже выполнил ее (за флаг) и Firefox может вскоре последовать. Также существует запрос для поднятия предложения на следующий этап.

Ответ 3

В то время меня не было, поэтому я не знаю, почему lookbehind там не было, но здесь была какая-то деятельность после ES6. Я написал реализацию. Net-style lookbehind для Fletch, которая представляет собой реализацию Dart, которая (например, dart2js и DartVM) имеет JS-совместимые регулярные выражения.

Это было перенесено на V8 в качестве экспериментальной функции, а порт V8 был портирован в Firefox. В V8 вы активируете его с флагом --harmony-regexp-lookbehind. На момент написания здесь нет пользовательского интерфейса, чтобы активировать его.

Вы можете играть с версией реализации Fletch на https://dartpad.dartlang.org/8feea83c01ab767acdf1, и вы можете попробовать. Net-style lookbehind at http://www.regexplanet.com/advanced/dotnet/index.html

В отличие от Perl и Python и большинства других движков regexp, это неограниченная реализация lookbehind: все функции, разрешенные в регулярных выражениях JS, также работают в lookbehinds, например * и +,? и {}, lookbehind-in-lookbehinds и look-aheads-in-lookbehinds. Я надеюсь, что кто-то найдет, чтобы помочь стандартизировать его. Если через год ECMAScript по-прежнему не имеет поддержки для поиска, то, вероятно, причина в том, что никто не может найти запись главы в стандарте.

Ответ 4

ES6 Spec уже завершен (июнь 2015 г.), и похоже, что это не удалось, к сожалению!: (