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