У символов каретки ^ и доллара $ есть специальные значения в регулярных выражениях. Они называются «якоря» (anchors).
Каретка ^ означает совпадение с началом текста, а доллар $ – с концом.
К примеру, давайте проверим начинается ли текст с Mary:
let str1 = "Mary had a little lamb";
alert( /^Mary/.test(str1) ); // true
Шаблон ^Mary означает: «начало строки, затем Mary».
Аналогично можно проверить, кончается ли строка словом snow при помощи snow$:
let str1 = "it's fleece was white as snow";
alert( /snow$/.test(str1) ); // true
В конкретно этих случаях мы могли бы использовать и методы строк startsWith/endsWith. Регулярные выражения следует применять, когда нужна проверка сложнее.
Проверка на полное совпадение
Оба якоря вместе ^...$ часто используются для проверки, совпадает ли строка с шаблоном полностью. Например, чтобы определить, в правильном ли формате пользователь ввёл данные.
Проверим, что строка является временем в формате 12:34, то есть две цифры, затем двоеточие, затем ещё две цифры.
На языке регулярных выражений это \d\d:\d\d:
let goodInput = "12:34";
let badInput = "12:345";
let regexp = /^\d\d:\d\d$/;
alert( regexp.test(goodInput) ); // true
alert( regexp.test(badInput) ); // false
Здесь совпадение с \d\d:\d\d ищется не где-то посередине текста, а сразу после начала строки ^, и после него должен быть сразу конец строки $.
То есть, вся строка – это как раз время в нужном нам формате.
Поведение якорей меняется, если присутствует флаг m. Мы рассмотрим этот флаг в следующей статье.
Якоря ^ и $ – это проверки. У них нулевая ширина.
Другими словами, они не добавляют к результату поиска символы, а только заставляют движок регулярных выражений проверять условие (начало/конец текста).
Комментарии
<code>, для нескольких строк кода — тег<pre>, если больше 10 строк — ссылку на песочницу (plnkr, JSBin, codepen…)