en.javascript.info/10-regular-expressions-javascript/13-regexp-ahchors-and-multiline-mode/article.md
2015-02-27 13:21:58 +03:00

3.2 KiB
Raw Blame History

Начало ^ и конец $ строки, многострочный режим

Знак каретки '^' и доллара '$' имеют в регулярном выражении особый смысл. Их называют "якорями" (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, дробь!