базовый курс

ГРУППА КУРСА

Спецсимволы в регулярных выражениях

В регулярных выражениях применяется много смецсимволов. Их также называют метасимволы. Некоторые из них уже рассматривались в прошлых темах. Это символы классов и квантификаторы. В этой теме рассматриваются остальные метасимволы.

Символ ^ означает начало строки, а $ означает конец строки. Для примера найдём первое слово в тексте:

+
1
2
3
4
5
6
7
8
<!DOCTYPE html>
<html>
<head>
<title>Страница</title>
<meta charset="utf-8">
</head>
<body>
<script>
9
10
11
var str = 'Здание построено из панелей';
var reg = /^[ёа-я]+/i;
document.write(str.match(reg));

Паттерн ищет такое сочетание: начало строки, затем русские буквы. Используется флаг i, чтобы учитывались заглавные буквы. Начало строки - это не символ, поэтому оно не входит в найденную подстроку.

Флаг m устанавливает многострочный режим. В этом режиме, если текст содержит символы перехода строки, то он делится на несколько строк. Символы ^ и $ находят начало и конец каждой строки.

Знак | означает логическое "или". Он используется, когда для определённой части паттерна предусмотрены разные варинаты. Эта часть может быть одной или другой. Варианты желательно писать в скобках.

Найдём в тексте фразы "бурый медведь" и "белый медведь":

12
13
14
str = 'Бурый медведь обитает в лесу, а белый медведь в арктике';
reg = /(бурый|белый) медведь/gi;
document.write('<br>'+str.match(reg));

Знак ^ внутри квадратных скобок означает логическое "не". Такой класс ищет любой символ, кроме указанных. Напомню, что есть символы классов, которые также ищют всё кроме определённых значений. Например \D находит всё, кроме цифр. А знак ^ используется, когда класс задаётся с помощью квадратных скобок. В остальном, класс пишется как обычно.

Из перечисленных слов найдём те, которые написаны в единственном числе. Они не должны заканчиваться на "и", "ы" и "е". Конечно этот способ не универсален, реальный поиск будет намного сложнее. Но для нашего примера он сработает.

15
16
17
str = 'слово большие кран коды прыжки друг быстрый тест ';
reg = /[ёа-я]+[^иые] /g;
document.write('<br>'+str.match(reg));

Если в регулярном выражении нужно использовать спецсимвол в качестве обычного символа, то он экранируется обратным слешем. В том числе, прямой и обратный слеши экранируются тем же способом.

\?

В квадратных скобках многие спецсимволы экранировать не обязательно. Например, точка означает именно точку, а не любой символ. Но если Вы их экранируете, то ничего не изменится.

Найдём числа имеющие дробную часть:

18
19
20
str = '5, 132.1, 0.7, 35, 19.72, 8, 12, 75.2';
reg = /\d+\.\d+/g;
document.write('<br>'+str.match(reg));

Паттерн ищет следующее сочетание: цифры, затем точка, затем снова цифры. Кстати, это регулярное выражение не различает положительные и отрицательные числа. Оно возвращает число без знака. Дополните паттерн так, чтобы отрицательное число он находил вместе со знаком. Если Вы знаете квантификаторы, то это будет просто.