Как известно, на языке JavaScript вам не удастся попросту записать на языке регулярных выражений нечто подобное:
someString.replace(/(?<!([abcdef]))gh/, …)
Не удастся потому, что в джаваскрипте нет учёта символов, предшествующих найденному выражению, то есть нет того, что называется «lookbehind assertions» — уж не знаю, есть ли устоявшийся термин для этого кода («
(?<!……)») на русском языке.
Естественно, что программисты, использующие JavaScript, выработали целый ряд приёмов, позволяющих обойти этот недостаток. (
Вон там перечислены многие такие трюки, например.)
Сейчас меня интересует кое-что другое, однако же. Не было ли в истории открытого кода каких-нибудь попыток окончательно решить эту проблему раз и навсегда — например, портировав библиотеку PCRE на язык JavaScript целиком?
Вопрос может показаться довольно дерзким по своему замаху, я знаю; однако, в конце концов, в истории не раз случались масштабные (и успешные!) попытки портировать или эмулировать на JavaScript то да сё; например,
эмулятор Commodore 64 (о котором я упоминал на Хабрахабре прошлой зимою), или реализация
многих функций PHP на JavaScript с открытым кодом, и так далее. Вдруг и с PCRE что-то подобноекому-нибудь удалось достигнуть, а я просто не знаю?
Опять же и попытки добавить в JavaScript новые флаги и элементы регулярных выражений также производились —
XRegExp, например. Правда, в нём нету lookbehind, к сожалению.