Согласно регулярным выражениям.info об обходах, движок делает шаг назад после просмотра вперед:
Давайте еще раз заглянем внутрь, чтобы убедиться, что вы понимаете последствия просмотра вперед. Применим q(?=u)i для выхода. Упреждающий просмотр теперь положительный, и за ним следует еще один токен. Опять же, q соответствует q, а u соответствует u. Опять же, совпадение из упреждающего поиска должно быть отброшено, поэтому механизм переходит от i в строке к u. Упреждающий просмотр был успешным, поэтому двигатель продолжает работу с i. Но я не могу сравниться с тобой. Таким образом, эта попытка матча не удалась. Все оставшиеся попытки также терпят неудачу, потому что в строке больше нет q.
Однако в Peg.js КАЖЕТСЯ, что движок все еще перемещается, минуя &
или !
, так что на самом деле это не просмотр вперед в том же смысле, что и регулярные выражения, а решение о потреблении, и есть никакого отступления и, следовательно, настоящего взгляда вперед.
Так ли это?
(Если это так, то некоторые парсеры даже невозможны, например этот?)