Lookahead и Lookbehind
Понимание продвинутых тем регулярных выражений 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
Отрицательный Lookahead
Отрицательное утверждение lookahead проверяет отсутствие определённого шаблона впереди текущей позиции. Оно обозначается как (?!...). В следующем примере показан отрицательный lookahead для поиска слова "apple", за которым не следует слово "pie":
Javascript regexp the negative lookahead
Положительный Lookbehind
Положительное утверждение lookbehind проверяет наличие определённого шаблона позади текущей позиции в строке. Оно обозначается как (?<=...). Ниже приведён пример кода для поиска слова "pie", перед которым стоит слово "apple":
Javascript regexp the positive lookbehind
Отрицательный Lookbehind
Отрицательное утверждение lookbehind проверяет отсутствие определённого шаблона позади текущей позиции. Оно обозначается как (?<!...). Вот пример для поиска слова "pie", перед которым не стоит слово "apple":
Lookahead and Lookbehind
Практическое применение Lookahead и Lookbehind
Проверка надёжности пароля
Обеспечение надёжности паролей — распространённое требование в веб-приложениях. Утверждения lookahead можно использовать для проверки различных условий пароля без потребления символов.
В этом примере мы проверили пароль, который должен содержать как минимум одну заглавную букву, одну строчную букву, одну цифру и один специальный символ.
Форматирование и разбор данных
Утверждения lookahead и lookbehind могут помочь при форматировании и разборе сложных структур данных. Хороший пример — вставка запятых в строку чисел для удобства чтения:
Заключение
Освоение утверждений lookahead и lookbehind в JavaScript может значительно повысить вашу способность обрабатывать и анализировать строки. Эти мощные инструменты обеспечивают гибкость проверки шаблонов без потребления символов, что делает их незаменимыми для сложных задач обработки текста. Используя эти утверждения, разработчики могут создавать более эффективные и действенные регулярные выражения, что ведёт к более чистому и поддерживаемому коду.
Практика
Какие из следующих утверждений о lookahead и lookbehind в JavaScript верны?