Синтаксис регулярных выражений
Метасимволы
Mетасимволы - символы, которые имеют определенный смысл:
- \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);
Kомбинация '\b', указывает на соответствие в пределах слова.
И в этом случае мы можем проводить замену, если регуляное выражение соответствует всему слову:
var initialText = "Языки обучения: Java, JavaScript, C++"; var exp = /Java\b/g; var result = initialText.replace(exp, "C#"); document.write(result); // Языки обучения: C#, JavaScript, C++Но при использовании '\b' надо учитывать, что в JavaScript отсутствует полноценная поддержка юникода, поэтому применять '\b' мы сможем только к англоязычным словам.
Использование групп в регулярных выражениях Для поиска в строке более сложных соответствий применяются группы. В регулярных выражениях группы заключаются в скобки. Например, у нас есть следующий код html, который содержит тег изображения: '
'. И допустим, нам надо вычленить из этого кода пути к изображениям:
var initialText = '<.img src= "picture.png" />;<.img src= "image.png" />';
document.write("<.h3> Первое включение<./h3>")
var exp = /[a-z]+\.(png|jpg)/i; // поиск независимо от регистра.
var result = initialText.match(exp);
result.forEach(function(value, index, array){
document.write(value + "<.br/>");
})
document.write("<.h3>Глобальный поиск<./h3>")
var exp = /[a-z]+\.(png|jpg)/ig; // поиск всех включений независимо от регистра.
var result = initialText.match(exp);
result.forEach(function(value, index, array){
document.write(value + "<.br/>");
})
Вывод браузера:
Output
Первая часть до скобок ([a-z]+\.) указывает на наличие в строке от 1 и более символов из диапазона a-z,
после которых идет точка.
Так как точка является специальным символом в регулярных выражениях,
то она экранируется слешем.
А дальше идет группа: (png|jpg).
Эта группа указывает, что после точки может использоваться как "png", так и "jpg".