Сведения о вопросе

DED

15:39, 1st October, 2020

Регулярные выражения, использующие lookbehind, на языке JavaScript. Есть ли готовый код, решающий эту проблему раз и навсегда?

Просмотров: 462   Ответов: 3

Как известно, на языке JavaScript вам не удастся попросту записать на языке регулярных выражений нечто подобное:someString.replace(/(?<!([abcdef]))gh/, …)

Не удастся потому, что в джаваскрипте нет учёта символов, предшествующих найденному выражению, то есть нет того, что называется «lookbehind assertions» — уж не знаю, есть ли устоявшийся термин для этого кода («(?<!……)») на русском языке.


Естественно, что программисты, использующие JavaScript, выработали целый ряд приёмов, позволяющих обойти этот недостаток. (Вон там перечислены многие такие трюки, например.)


Сейчас меня интересует кое-что другое, однако же. Не было ли в истории открытого кода каких-нибудь попыток окончательно решить эту проблему раз и навсегда — например, портировав библиотеку PCRE на язык JavaScript целиком?


Вопрос может показаться довольно дерзким по своему замаху, я знаю; однако, в конце концов, в истории не раз случались масштабные (и успешные!) попытки портировать или эмулировать на JavaScript то да сё; например, эмулятор Commodore 64 (о котором я упоминал на Хабрахабре прошлой зимою), или реализация многих функций PHP на JavaScript с открытым кодом, и так далее. Вдруг и с PCRE что-то подобноекому-нибудь удалось достигнуть, а я просто не знаю?


Опять же и попытки добавить в JavaScript новые флаги и элементы регулярных выражений также производились — XRegExp, например. Правда, в нём нету lookbehind, к сожалению.



  Сведения об ответе

DO__IT

16:46, 29th September, 2020

Можно конечно это все портировать, но тогда это будет бессмысленное занятие. Это будет на столько медленно, что Вы не будете это использовать. Эмуляция, по сути своей, ведь будет набором indexOf.


  Сведения об ответе

lats

06:35, 26th September, 2020

Кажется «lookbehind assertions» — это «ретроспективная проверка», а «lookahead assertions» — «опережающая проверка».


  Сведения об ответе

JUST___

08:30, 30th September, 2020

Уже доступно со специальными флагами, скоро будет доступно везде.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться