W3docs

Lookahead и Lookbehind

In this chapter, we are going to explore more about finding matches in JavaScript. Learn the convenient ways of using Lookahead and Lookbehind in practice.

Понимание продвинутых тем регулярных выражений JavaScript полезно любому разработчику, стремящемуся улучшить свои навыки программирования. Среди более продвинутых и мощных возможностей в этой области — утверждения lookahead и lookbehind. Эти утверждения позволяют разработчикам искать шаблоны в тексте, не включая эти шаблоны в результат. Это руководство призвано подробно рассмотреть утверждения lookahead и lookbehind в JavaScript, с множеством практических примеров.

warning

Регулярные выражения могут быть непростыми, и могут существовать крайние случаи. Особенно когда вы используете такие продвинутые концепции, как Lookahead и Lookbehind. Используйте онлайн-тестеры регулярных выражений или пишите модульные тесты, чтобы проверять ваши выражения на различных сценариях ввода и убедиться, что они работают ожидаемым образом.

Введение в утверждения Lookahead и Lookbehind

Утверждения lookahead и lookbehind — это утверждения нулевой ширины, то есть они сопоставляют позицию внутри строки, а не сами символы. Они позволяют нам проверять, существует ли заданный шаблон или не существует ли он в определённой точке строки. Примечание: современные движки JavaScript (ES2018+) поддерживают утверждения lookbehind переменной длины, хотя в некоторых старых средах могут требоваться шаблоны фиксированной длины.

Положительный Lookahead

Положительное утверждение lookahead проверяет наличие определённого шаблона впереди текущей позиции в строке. Оно обозначается как (?=...). В следующем примере показан положительный lookahead для поиска слова "apple", за которым следует слово "pie":

Javascript regexp lookaround corresponds to characters

javascript— editable

Отрицательный Lookahead

Отрицательное утверждение lookahead проверяет отсутствие определённого шаблона впереди текущей позиции. Оно обозначается как (?!...). В следующем примере показан отрицательный lookahead для поиска слова "apple", за которым не следует слово "pie":

Javascript regexp the negative lookahead

javascript— editable

Положительный Lookbehind

Положительное утверждение lookbehind проверяет наличие определённого шаблона позади текущей позиции в строке. Оно обозначается как (?<=...). Ниже приведён пример кода для поиска слова "pie", перед которым стоит слово "apple":

Javascript regexp the positive lookbehind

javascript— editable

Отрицательный Lookbehind

Отрицательное утверждение lookbehind проверяет отсутствие определённого шаблона позади текущей позиции. Оно обозначается как (?<!...). Вот пример для поиска слова "pie", перед которым не стоит слово "apple":

Lookahead and Lookbehind

javascript— editable

Практическое применение Lookahead и Lookbehind

Проверка надёжности пароля

Обеспечение надёжности паролей — распространённое требование в веб-приложениях. Утверждения lookahead можно использовать для проверки различных условий пароля без потребления символов.


javascript— editable

В этом примере мы проверили пароль, который должен содержать как минимум одну заглавную букву, одну строчную букву, одну цифру и один специальный символ.

Форматирование и разбор данных

Утверждения lookahead и lookbehind могут помочь при форматировании и разборе сложных структур данных. Хороший пример — вставка запятых в строку чисел для удобства чтения:


javascript— editable

Заключение

Освоение утверждений lookahead и lookbehind в JavaScript может значительно повысить вашу способность обрабатывать и анализировать строки. Эти мощные инструменты обеспечивают гибкость проверки шаблонов без потребления символов, что делает их незаменимыми для сложных задач обработки текста. Используя эти утверждения, разработчики могут создавать более эффективные и действенные регулярные выражения, что ведёт к более чистому и поддерживаемому коду.

Практика

Практика

Какие из следующих утверждений о lookahead и lookbehind в JavaScript верны?