3.2 KiB
Начало ^ и конец $ строки, многострочный режим
Знак каретки '^'
и доллара '$'
имеют в регулярном выражении особый смысл. Их называют "якорями" (anchor - англ.).
[cut]
Каретка ^
совпадает в начале текста, а доллар $
-- в конце.
Якоря являются не символами, а проверками. Они совпадают на "позиции".
Это очень важное отличие по сравнению с символьными классами. Если движок регулярных выражений видит ^
-- он проверяет начало текста, $
-- проверяет конец текста, при этом никаких символов к совпадению не добавляется.
Каретку ^
обычно используют, чтобы указать, что регулярное выражение необходимо проверить именно с начала текста.
Например, без каретки:
//+ run
var str = '100500 попугаев съели 500100 бананов!';
alert( str.match( /\d+/ig ) // 100500, 500100 (все числа)
А с кареткой:
//+ run
var str = '100500 попугаев съели 500100 бананов!';
alert( str.match( /^\d+/ig ) // 100500 (только в начале строки)*!*
Знак доллара $
используют, чтобы указать, что паттерн должен заканчиваться в конце текста.
Тот же пример с долларом:
//+ run
var str = '100500 попугаев съели 500100 бананов!';
alert( str.match( /\d+$/ig ) // null (в начале строки чисел нет)*!*
Якоря используют одновременно, чтобы указать, что паттерн должен охватывать текст с начала и до конца. Обычно это требуется при валидации.
Например, мы хотим проверить, что в переменной num
хранится именно десятичная дробь.
Ей соответствует регэксп \d+.\d+
. Но простая проверка найдёт дробь в любом тексте:
//+ run
var num = "ля-ля 12.34";
alert( num.match( /\d+\.\d+/ig) ); // 12.34
Если мы хотим проверить, что num
целиком соответствует паттерну \d+.\d+
, то укажем якоря по обе стороны от него:
//+ run
var num = "ля-ля 12.34";
alert( num.match( /^\d+\.\d+$/ig) ); // null, не дробь
var num = "12.34";
alert( num.match( /^\d+\.\d+$/ig) ); // 12.34, дробь!