Задать вопрос
@dimentimor

Зачем нужны опережающие и ретроспективные проверки?

В статье есть вот такой пример:
В качестве первого примера найдём стоимость из строки "1 индейка стоит 30E". То есть, найдём число, после которого есть знак валюты E.

И предлагается делать это вот так: /\d+(?=E)/
Но почему не вот так? /(\d+)E/
  • Вопрос задан
  • 48 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
dollar
@dollar
Делай добро и бросай его в воду.
Потому что некоторые задачи имеют дело с повторениями.

Повторения - худшее из того, что мешает искать подстроки. В вашем примере нет повторений, то есть E не может быть цифрой, и наоборот.

Однако что если вам нужно найти все цифры между двумя E?
Вот такие:
E123ExxxE456E789E

По вашей логике нужно выражение: /E(\d+)E/
И да, оно действительно найдёт 123 и 456 (см. ссылку), но на 789 оно сломается, потому что там E входит как бы сразу в две подстроки. В этом случае и нужен позитивный просмотр вперёд. Мы как бы подсматриваем, что там впереди, но не захватываем, поэтому поиск следующей подстроки начинается раньше.
Для такой задачи решением будет: /E(\d+)(?=E)/
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы