Регулярные выражения в JavaScript часть 3 (match, test, replace)

В предыдущей части статьи "Регулярные выражения в JavaScript часть 2 (replace)" мы говорили исключительно о методе replace, который заменяет часть строки. Есть ещё метод test, который выполняет поиск в строке по регулярному выражению.

Наличие подстроки в строке (метод test)

Этот метод возвращает true, если хотя бы одно совпадение найдено и false, если не было найдено ни одного совпадения. Но в отличии от методов, рассмотренных в предыдущих статьях, у test надо ставить регулярное выражение до названия метода через точку, а единственный параметр в скобках - это строка, в которой происходит поиск. Приведём пример использования:
var a = 'Тише, мыши, кот на крыше';
console.log( /ше/.test(a) );  // вернёт true
console.log( /сыр/.test(a) );  // вернёт false
Функция test применяется довольно часто для валидации значений полей в формах. К примеру, для проверки правильно ли введён мэйл адрес. Причём проверяется значение от начала до конца, поэтому ставятся знаки ^ и $:
var a = 'support@mousedc.ru';
console.log( /^[a-zA-Z-.]+@[a-z]+\.[a-z]{2,3}$/.test(a) ); // вернёт true

Получить часть подстроки (метод match)

Метод test всего лишь говорит есть или нет подстроки в строке. Но есть ещё метод match, который возвращает массив из подстрок, найденных по регулярному выражению. Посмотрим на практике, что это значит:
var a = 'Тише, мыши, кот на крыше';
console.log( a.match(/..ш./g) );
В результате выполнения такого кода в консоли будет распечатан массив, который содержит три найденных совпадения:
Array
(
   [0] => Тише
   [1] => мыши
   [2] => рыше
)

Замена в строке и карманы (метод replace)

Метод replace умеет использовать так называемые "карманы". То есть есть возможность обратиться к найденным вариациям внутри метода. Эти карманы появляются, если использовать скобки ( ). Их можно подставлять во второй параметр функции, используя порядковый номер и знак $. Таким образом можно заменять части строки так, что содержащиеся в кармане части будут подставляться на замену.
var a = 'Сыр, мышь, кот';
console.log( a.replace(/([а-я]+), ([а-я]+), ([а-я]+)/i, '$3, $1, $2') );
В первый карман попадёт слово "Сыр", во второй "мышь", а в третий "кот". По правилу '$3, $1, $2' результат будет иметь содержимое из 3 кармана, затем запятую и пробел, потом содержимое 1 кармана с запятой и пробелом, и в конце содержимое 2 кармана. Результат будет такой:
кот, Сыр, мышь
Напомним, что регулярными выражениями необходимо пользоваться только в том случае, если нет никакого другого способа решения.

Ошибки в регулярных выражениях - это очень частое явление. Поэтому прибегайте к этому инструменту только в самых-самых безвыходных ситуациях, когда всё остальное уже опробовано.
Можно обращаться к содержимому кармана непосредственно в регулярном выражении. То есть в карман заносятся данные и тут же достаются. Для этого необходимо поставить слеш \ и затем номер кармана непосредственно в регулярном выражении:
var a = 'Сыр, сыыр, сыыыр';
console.log( a.replace(/([а-я]+)\1/gi, '!') );
В приведённом примере выражение "/([а-я]+)\1/" сначала заносит в карман любую букву, а котом достаёт её же и ставит после найденной. Эффект получается такой, как будто мы находим повторяющуюся два раза букву и делаем её замену:
Сыр, с!р, с!ыр

Позитивный и негативный просмотр

Методом replace найденное выражение заменяется полностью на второй параметр. Но что делать, если нам не надо заменять всё найденное, а только часть? Для этого есть позитивный и негативный просмотр.

Представьте, что нужно заменить слово, не заменяя первую букву. Приведём пример реализации:
var a = 'Тише, мыши, кот на крыше';
console.log( a.replace(/(?!к)от/gi, 'отята') );
Результат будет такой:
Тише, мыши, котята на крыше
Хоть буква "к" и стоит в регулярном выражении, но она стоит в специальных скобках (?!к), которые проверяют наличие буквы, но не подставляют её на замену. Такие скобки называются негативным просмотром. Можно сделать позитивный просмотр и в конце строки:
var a = 'Тише, мыши, кот на крыше';
console.log( a.replace(/крыш(?=е)/gi, 'сыр') );
Позитивный просмотр (?=е) проверяет, есть ли в конце строки буква "е". Происходит замена и получается такая строка:
Тише, мыши, кот на сыре
Это конец темы регулярных выражений. Поэтому ещё раз напомним, что регулярными выражениями необходимо пользовать только в том случае, если нет никакого другого выхода.

Ошибки в регулярных выражениях - это очень частое явление. Поэтому прибегайте к этому инструменту только в самых-самых безвыходных случаях, когда не остаётся ничего другого.
MouseDC.ru - хостинг, виртуальный хостинг, покупка доменов, проверка доменов, WHOIS, курсы создания сайтов, вебинары по созданию, курсы разработки сайтов, доработка сайтов, сопровождение сайтов, разработка сайтов, техподдержка сайтов
Была ли эта статья полезна? Есть вопрос?
Cмотрите другие статьи: