W3docs

Якоря ^ и $ в регулярных выражениях JavaScript

Якоря — специальные символы в регулярных выражениях, позволяющие сопоставлять позиции внутри строки, а не конкретные символы.

Введение в якоря JavaScript

Якоря — это специальные символы в регулярных выражениях, которые позволяют сопоставлять позиции внутри строки, а не сами символы. Два основных якоря в JavaScript — это ^ (каретка) и $ (знак доллара). Якорь ^ утверждает, что совпадение должно начинаться в начале строки, тогда как якорь $ утверждает, что совпадение должно происходить в конце строки.

Ключевая идея: якоря имеют нулевую ширину. Они соответствуют позиции между символами, а не самому символу, поэтому никогда не потребляют текст. Именно поэтому /^abc$/ совпадает со строкой из трёх символов "abc", а не с четырёх- или пятисимвольной — ^ и $ не добавляют длины совпадению. Это же свойство позволяет использовать якорь в replace для вставки текста в самое начало или конец строки, ничего не удаляя:

javascript— editable

На этой странице рассматривается сопоставление начала и конца строки, объединение обоих якорей для точного совпадения всей строки, влияние флага m (многострочный режим) на их поведение, а также работа якорей с методами test() и match().

Якорь ^: сопоставление начала строки

Якорь ^ используется для проверки того, начинается ли строка с определённого шаблона.

Использование якоря ^

javascript— editable

В этом примере ^Hello гарантирует, что строка начинается с "Hello". Строка 'Hello, world!' соответствует шаблону, а 'Say Hello, world!' — нет, потому что "Hello" не находится в начале.

Практический пример: проверка начала адреса электронной почты

javascript— editable

Это регулярное выражение проверяет, начинается ли адрес электронной почты с допустимого имени пользователя. Строка '[email protected]' совпадает, и '[email protected]' тоже совпадает, поскольку обе начинаются с допустимого шаблона имени пользователя перед символом @.

Якорь $: сопоставление конца строки

Якорь $ используется для проверки того, заканчивается ли строка определённым шаблоном.

Использование якоря $

javascript— editable

В этом примере world!$ гарантирует, что строка заканчивается на "world!". Строка 'Hello, world!' соответствует шаблону, а 'Hello, world' — нет, поскольку в ней отсутствует восклицательный знак в конце.

Практический пример: проверка расширения файла

javascript— editable

Это регулярное выражение проверяет, заканчивается ли имя файла расширением ".txt". Строка 'document.txt' совпадает, тогда как 'document.pdf' — нет.

Информация

Якоря (^ и $) в регулярных выражениях JavaScript позволяют точно сопоставлять начало или конец строки, обеспечивая точную проверку и обработку текста.

Объединение ^ и $ для точных совпадений

Объединив ^ и $, можно создать регулярное выражение, которое совпадает со строкой целиком — от начала до конца.

Использование обоих якорей

javascript— editable

В этом примере ^Hello, world!$ гарантирует, что вся строка совпадает с "Hello, world!". Только строка 'Hello, world!' совпадает точно.

Практический пример: проверка точного шаблона

javascript— editable

Это регулярное выражение гарантирует, что адрес электронной почты имеет правильный формат от начала до конца. Оно проверяет наличие допустимого имени пользователя, символа "@", доменного имени и домена верхнего уровня.

Использование якорей для точной проверки

Якоря особенно полезны при проверке ввода, когда необходимо убедиться, что вся строка соответствует шаблону. Например, используйте ^ и $ для проверки телефонных номеров, почтовых индексов или любого ввода фиксированного формата.

Пример: проверка американского номера телефона

javascript— editable

Это регулярное выражение гарантирует, что номер телефона имеет формат (123) 456-7890. Оно использует ^ для проверки начала и $ для проверки конца, обеспечивая совпадение всей строки с указанным шаблоном.

Якоря и флаг многострочного режима (m)

По умолчанию ^ и $ соответствуют только самому началу и самому концу всей строки, даже если строка содержит переносы строк. При добавлении флага m (многострочный) их смысл меняется: ^ и $ начинают также соответствовать началу и концу каждой строки.

javascript— editable

Без m /^.+$/g возвращает null, потому что . не совпадает с символами переноса строки, и ни одна строка не охватывает всю исходную строку от начала до конца. С флагом m каждая строка сопоставляется независимо. При работе с многострочным вводом флаг m почти всегда является тем, что нужно — см. Многострочный режим якорей, флаг "m" для более подробного изучения.

Якоря с test() и match()

Якоря ведут себя одинаково вне зависимости от вызываемого метода; разница заключается в том, что каждый метод возвращает.

  • regexp.test(str) возвращает boolean — идеально для проверки ("начинается/заканчивается ли строка правильно?").
  • str.match(regexp) возвращает найденный текст (или array с флагом g) или null при отсутствии совпадения — полезен, когда нужно получить само найденное значение.
javascript— editable

Поскольку \d+$ привязан к концу, он захватывает конечное число 42 и ничего больше. Когда нужен только ответ «да/нет», предпочтительнее использовать test(); используйте match(), когда требуется получить само значение.

Информация

Если нужно сопоставить конкретный символ на границе между словесным и несловесным символом, а не на краю строки, используйте \b граница слова вместо ^ или $.

Заключение

Якоря — мощный инструмент в регулярных выражениях JavaScript, позволяющий сопоставлять позиции внутри строки. Освоив якоря ^ и $, вы сможете создавать точные и эффективные шаблоны для проверки и обработки строк. Независимо от того, нужно ли вам убедиться, что строка начинается или заканчивается определённым шаблоном, или полностью совпасть со строкой, якоря незаменимы для надёжных операций с регулярными выражениями.

Практика

Практика
Что верно относительно использования каретки (^) и доллара ($) в JavaScript?
Что верно относительно использования каретки (^) и доллара ($) в JavaScript?
Was this page helpful?