Уроки модуля (1/4)
Позитивный прогноз: `(?=...)`
Положительный просмотр (?=...) — это утверждение нулевой ширины:
он проверяет, что определенный шаблон соответствует текущей позиции, но ** не
не использовать** эти символы.
Pattern: \d+(?= euro)
Sample: Prezzo 100 euro, sconto 25 euro, totale 75 dollari.
^^^ ^^Упреждающий просмотр (?= euro) требует, чтобы за цифрами следовал euro, но
совпадение включает только цифры. 75 dollari не соответствует (нет euro).
Почему «нулевая ширина»
Думайте о предварительном просмотре как о условии позиции, а не как о часть матча:
- Матч останавливается перед просмотром вперед. — Позиция «после совпадения» — это начало текста, проверяемого при предварительном просмотре.
- С этого момента возобновится следующая попытка сопоставления с флагом
g.
Это делает его идеальным для извлечения значений без их контекста: цен. без валюты, слов перед знаками препинания и т. д.
Функции просмотра вперед и сканирование нулевой ширины
Положительный просмотр вперед (?=...) гарантирует, что указанный шаблон следует за текущей точкой, но сканирование возобновляется с позиции до просмотра вперед. Это предотвращает «потребление» частей текста, которые могут понадобиться для последующих совпадений.
Попробуйте это
Извлекайте ТОЛЬКО цифры цен в евро (последовательность цифр, за которой следует слово «евро»). В матче нет валюты.
Показать подсказку
Переместите 'евро' внутрь опережающего просмотра (?= евро): строка не будет частью совпадения.
Решение доступно после 3 попыток
Обзор упражнения
Найдите каждое слово, за которым сразу следует двоеточие `:` (но не включая двоеточие в совпадение).
Показать подсказку
Та же логика: `:` отсутствует в совпадении, но это условие позиции.
Решение доступно после 3 попыток
Дополнительная задача
Find every word (e.g. function name) followed immediately by an open parenthesis `(`, excluding the parenthesis from the match.
Показать подсказку
Переместите \\( (экранированная открывающая скобка) внутри положительного просмотра вперед (?=...).
Решение доступно после 3 попыток