Синтаксис регулярных выражений

Последнее обновление: 1.11.2015

Рассмотрим базовые моменты синтаксиса регулярных выражений.

Метасимволы

Регулярные выражения также могут использовать метасимволы - символы, которые имеют определенный смысл:

  • \d: соответствует любой цифре от 0 до 9

  • \D: соответствует любому символу, который не является цифрой

  • \w: соответствует любой букве, цифре или символу подчеркивания (диапазоны A–Z, a–z, 0–9)

  • \W: соответствует любому символу, который не является буквой, цифрой или символом подчеркивания (то есть не находится в следующих диапазонах A–Z, a–z, 0–9)

  • \s: соответствует пробелу

  • \S: соответствует любому символу, который не является пробелом

  • .: соответствует любому символу

Здесь надо заметить, что метасимвол \w применяется только для букв латинского алфавита, кириллические символы для него не подходят.

Так, стандартный формат номера телефона +1-234-567-8901 соответствует регулярному выражению \d-\d\d\d-\d\d\d-\d\d\d\d. Например, заменим числа номера нулями:

var phoneNumber = "+1-234-567-8901";
var myExp = /\d-\d\d\d-\d\d\d-\d\d\d\d/;
phoneNumber = phoneNumber.replace(myExp, "00000000000");
document.write(phoneNumber);

Модификаторы

Кроме выше рассмотренных элементов регулярных выражений есть еще одна группа комбинаций, которая указывает, как символы в строке будут повторяться. Такие комбинации еще называют модификаторами:

  • {n}: соответствует n-ому количеству повторений предыдущего символа. Например, h{3} соответствует подстроке "hhh"

  • {n,}: соответствует n и более количеству повторений предыдущего символа. Например, h{3,} соответствует подстрокам "hhh", "hhhh", "hhhhh" и т.д.

  • {n,m}: соответствует от n до m повторений предыдущего символа. Например, h{2, 4} соответствует подстрокам "hh", "hhh", "hhhh".

  • ?: соответствует одному вхождению предыдущего символа в подстроку или его отсутствию в подстроке. Например, /h?ome/ соответствует подстрокам "home" и "ome".

  • +: соответствует одному и более повторений предыдущего символа

  • *: соответствует любому количеству повторений или отсутствию предыдущего символа

  • ^: соответствует началу строки. Например, ^h соответствует строке "home", но не "ohma", так как h должен представлять начало строки

  • $: соответствует концу строки. Например, м$ соответствует строке "дом", так как строка должна оканчиваться на букву м

Например, возьмем номер тот же телефона. Ему соответствует регулярное выражение \d-\d\d\d-\d\d\d-\d\d\d\d. Однако с помощью выше рассмотренных комбинаций мы его можем упростить: \d-\d{3}-\d{3}-\d{4}

Также надо отметить, что так как символы ?, +, * имеют особый смысл в регулярных выражениях, то чтобы их использовать в обычным для них значении (например, нам надо заменить знак плюс в строке на минус), то данные символы надо экранировать с помощью слеша:

var phoneNumber = "+1-234-567-8901";
var myExp = /\+\d-\d{3}-\d{3}-\d{4}/;
phoneNumber = phoneNumber.replace(myExp, "80000000000");
document.write(phoneNumber);

Отдельно рассмотрим применение комбинации '\b', которая указывает на соответствие в пределах слова. Например, у нас есть следующая строка: "Языки обучения: Java, JavaScript, C++". Со временем мы решили, что Java надо заменить на C#. Но простая замена приведет также к замене строки "JavaScript" на "C#Script", что недопустимо. И в этом случае мы можем проводить замену, если регуляное выражение соответствует всему слову:

var initialText = "Языки обучения: Java, JavaScript, C++";
var exp = /\bJava\b/g;
var result = initialText.replace(exp, "C#");
document.write(result); // Языки обучения: C#, JavaScript, C++

Но при использовании '\b' надо учитывать, что в JavaScript отсутствует полноценная поддержка юникода, поэтому применять '\b' мы сможем только к англоязычным словам.

Использование групп в регулярных выражениях

Для поиска в строке более сложных соответствий применяются группы. В регулярных выражениях группы заключаются в скобки. Например, у нас есть следующий код html, который содержит тег изображения: '<img src="picture.png" />'. И допустим, нам надо вычленить из этого кода пути к изображениям:

var initialText = '<img src= "picture.png" />'; 
var exp = /[a-z]+\.(png|jpg)/i;
var result = initialText.match(exp); 
result.forEach(function(value, index, array){
	
	document.write(value + "<br/>");
})

Вывод браузера:

picture.png
png

Первая часть до скобок ([a-z]+\.) указывает на наличие в строке от 1 и более символов из диапазона a-z, после которых идет точка. Так как точка является специальным символом в регулярных выражениях, то она экранируется слешем. А дальше идет группа: (png|jpg). Эта группа указывает, что после точки может использоваться как "png", так и "jpg".

Помощь сайту
WebMoney
  • P378451176208
  • Z280152397659
ЮMoney/Яндекс-Деньги
  • 410011174743222
PayPal
  • metanit22@mail.ru
Перевод на карту
  • Номер карты: 4048415020898850