Якоря ^ и $ в регулярных выражениях JavaScript
Якоря — специальные символы в регулярных выражениях, позволяющие сопоставлять позиции внутри строки, а не конкретные символы.
Введение в якоря JavaScript
Якоря — это специальные символы в регулярных выражениях, которые позволяют сопоставлять позиции внутри строки, а не сами символы. Два основных якоря в JavaScript — это ^ (каретка) и $ (знак доллара). Якорь ^ утверждает, что совпадение должно начинаться в начале строки, тогда как якорь $ утверждает, что совпадение должно происходить в конце строки.
Ключевая идея: якоря имеют нулевую ширину. Они соответствуют позиции между символами, а не самому символу, поэтому никогда не потребляют текст. Именно поэтому /^abc$/ совпадает со строкой из трёх символов "abc", а не с четырёх- или пятисимвольной — ^ и $ не добавляют длины совпадению. Это же свойство позволяет использовать якорь в replace для вставки текста в самое начало или конец строки, ничего не удаляя:
На этой странице рассматривается сопоставление начала и конца строки, объединение обоих якорей для точного совпадения всей строки, влияние флага m (многострочный режим) на их поведение, а также работа якорей с методами test() и match().
Якорь ^: сопоставление начала строки
Якорь ^ используется для проверки того, начинается ли строка с определённого шаблона.
Использование якоря ^
В этом примере ^Hello гарантирует, что строка начинается с "Hello". Строка 'Hello, world!' соответствует шаблону, а 'Say Hello, world!' — нет, потому что "Hello" не находится в начале.
Практический пример: проверка начала адреса электронной почты
Это регулярное выражение проверяет, начинается ли адрес электронной почты с допустимого имени пользователя. Строка '[email protected]' совпадает, и '[email protected]' тоже совпадает, поскольку обе начинаются с допустимого шаблона имени пользователя перед символом @.
Якорь $: сопоставление конца строки
Якорь $ используется для проверки того, заканчивается ли строка определённым шаблоном.
Использование якоря $
В этом примере world!$ гарантирует, что строка заканчивается на "world!". Строка 'Hello, world!' соответствует шаблону, а 'Hello, world' — нет, поскольку в ней отсутствует восклицательный знак в конце.
Практический пример: проверка расширения файла
Это регулярное выражение проверяет, заканчивается ли имя файла расширением ".txt". Строка 'document.txt' совпадает, тогда как 'document.pdf' — нет.
Якоря (^ и $) в регулярных выражениях JavaScript позволяют точно сопоставлять начало или конец строки, обеспечивая точную проверку и обработку текста.
Объединение ^ и $ для точных совпадений
Объединив ^ и $, можно создать регулярное выражение, которое совпадает со строкой целиком — от начала до конца.
Использование обоих якорей
В этом примере ^Hello, world!$ гарантирует, что вся строка совпадает с "Hello, world!". Только строка 'Hello, world!' совпадает точно.
Практический пример: проверка точного шаблона
Это регулярное выражение гарантирует, что адрес электронной почты имеет правильный формат от начала до конца. Оно проверяет наличие допустимого имени пользователя, символа "@", доменного имени и домена верхнего уровня.
Использование якорей для точной проверки
Якоря особенно полезны при проверке ввода, когда необходимо убедиться, что вся строка соответствует шаблону. Например, используйте ^ и $ для проверки телефонных номеров, почтовых индексов или любого ввода фиксированного формата.
Пример: проверка американского номера телефона
Это регулярное выражение гарантирует, что номер телефона имеет формат (123) 456-7890. Оно использует ^ для проверки начала и $ для проверки конца, обеспечивая совпадение всей строки с указанным шаблоном.
Якоря и флаг многострочного режима (m)
По умолчанию ^ и $ соответствуют только самому началу и самому концу всей строки, даже если строка содержит переносы строк. При добавлении флага m (многострочный) их смысл меняется: ^ и $ начинают также соответствовать началу и концу каждой строки.
Без m /^.+$/g возвращает null, потому что . не совпадает с символами переноса строки, и ни одна строка не охватывает всю исходную строку от начала до конца. С флагом m каждая строка сопоставляется независимо. При работе с многострочным вводом флаг m почти всегда является тем, что нужно — см. Многострочный режим якорей, флаг "m" для более подробного изучения.
Якоря с test() и match()
Якоря ведут себя одинаково вне зависимости от вызываемого метода; разница заключается в том, что каждый метод возвращает.
regexp.test(str)возвращает boolean — идеально для проверки ("начинается/заканчивается ли строка правильно?").str.match(regexp)возвращает найденный текст (или array с флагомg) илиnullпри отсутствии совпадения — полезен, когда нужно получить само найденное значение.
Поскольку \d+$ привязан к концу, он захватывает конечное число 42 и ничего больше. Когда нужен только ответ «да/нет», предпочтительнее использовать test(); используйте match(), когда требуется получить само значение.
Если нужно сопоставить конкретный символ на границе между словесным и несловесным символом, а не на краю строки, используйте \b граница слова вместо ^ или $.
Заключение
Якоря — мощный инструмент в регулярных выражениях JavaScript, позволяющий сопоставлять позиции внутри строки. Освоив якоря ^ и $, вы сможете создавать точные и эффективные шаблоны для проверки и обработки строк. Независимо от того, нужно ли вам убедиться, что строка начинается или заканчивается определённым шаблоном, или полностью совпасть со строкой, якоря незаменимы для надёжных операций с регулярными выражениями.