Страницы

Поиск по вопросам

пятница, 15 февраля 2019 г.

Как работает lookbehind в js?

Ожидал, что выражение /(.)(? console.log("12".match(/(.)(?


Ответ

Это происходит по той причине, что .* может найти пустую строку, а значит выражение (.)(?Используйте .+
console.log("12".match(/(.)(? Блок предварительного просмотра вперёд срабатывает в том месте, где находится текущая позиция. (.) находит 1, сразу после этого происходит проверка, есть ли перед текущей позицией такой же символ, перед которым может быть 1 и более символов, отличных от знаков перехода на новую строку. Т.е. можно представить это так: после того, как найдена 1, срабатывает .+, как в блоке предварительного просмотора вперёд (только тут этот шаблон находит всю подстроку до её начала), а потом движок ищет ближайший к началу строки символ, идентичный захваченному в группе №1. Так как текущая позиция находится сразу после 1, .+ не разрешает \1 найти захваченный символ (так как перед этим идентичным символом должен быть как минимум один символ).

Комментариев нет:

Отправить комментарий