Регулярное выражение (англ. regular expression
, regex
, regexp
) - это поисковый шаблон (англ. search pattern
), который позволяет по заданным в нём правилам найти подстроку (некоторую последовательность символов) в некоторой строке.
Таким образом, основной целью использования регулярного выражения является проверка на соответствие (англ. match
) некоторой строки заданному шаблону.
Для написания поискового шаблона используется специальный формальный язык, который поддерживается во многих системах и языках программирования.
- конкретные символы алфавита,
- класс символов (цифры, буквы, знаки пунктуации),
- промежуток символов, которые должны быть включены в поиск или должны быть исключены из него,
- количество символов заданного вида,
- логические условия и многое другое.
Всё это мы рассмотрим далее на примерах.
- при поиске: для включения удовлетворяющих шаблону строк в некоторую выборку
- при валидации строки: проверка сложность пароля, проверка правильности введённого номера телефона или электронной почты
- при необходимости обрабатывать строку по-разному в зависимости от того, что она содержит.
Подобно тому, как строки обычно заключаются в одинарные, двойные или косые ковычки:
'hello'
"hi"
`welcome`
регулярные выражения размещают между двумя косыми чертами /
(англ. slash
):
/hey/
Это позволяет интерпретатору (компилятору) отличить регулярное выражение от других выражений.
Самим простым поисковым шаблоном является конкретная последовательность символов.
Например, выясним, какие из указанных строк содержат подстроку "ay"
. Регулярное выражение примет вид /ay/
.
'Ray Palmer'.match(/ay/); // ['ay', index: 1] (начинается с 1-ого символа)
'Dorian Gray'.match(/ay/); // ['ay', index: 9] (начинается с 9-ого символа)
'Max Starling'.match(/ay/); // null (соответствий не найдено)
Регулярное выражение позволяет перечислить допустимые символы. Для этого используются квадратные скобки []
(англ. square brackets
. Читается как "любой символ из символов ...".
Например,
- регулярному выражению
[abc]
удовлетворяет каждый из символовa
,b
,c
и никакой другой символ, - регулярному выражению
[13579]
удовлетворяют только символы1
,3
,5
,7
,9
'May'.match(/[abc]/) // ['a', index: 1]
'#ff00ff'.match(/[0123456789]/) // ['0', index: 2]
Для исключения из регулярного выражения символов используется символ карет ^
(англ. caret
) внутри квадратных скобок. Читается как "любой символ кроме символов из интервала".
Для включения в регулярное выражение символов из некоторого интервала символов используется символ -
(англ. hyphen) внутри квадратных скобок. Читается как "любой символ из интервала ...".
Например,
- регулярное выражение
/[0-9]/
удовлетворяет любому из символов0, 1, 2, 3, 4, 5, 6, 7, 8, 9
(то есть любой цифре), - регулярное выражение
[A-Z]
- любой большой букве латинского алфавита, - регулярное выражение
[a-z]
- любой маленькой букве латинсткого алфавита, - а выражение
[А-я]
- любой букве (большой или маленькой) русского алфавита*
'Hello'.match(/[A-Z]/) // ['H', index: 0]
'Hi'.match(/[a-z]/) // ['i', index: 1]
'Hey'.match(/[0-9]/) // null
'Greetings user2000'.match(/[0-9]/) // ['2', index: 14]
Для исключения из регулярного выражения символов из некоторого интервала так же используется символ карет ^
(англ. caret
).
Например,
'Greetings user2000'.match(/[^0-9]/) // ['G', index: 0]
'15,000 dollars'.match(/[0-9]/) // ['1', index: 0]
'15,000 dollars'.match(/[^0-9]/) // [',', index: 2]
'GitHub'.match(/[^A-z]/) // null
Например, регулярное выражение [A-Za-z0-9]
удовлетворяет любой букве латинского алфавита или цифре, а регулярное выражение [^A-Za-z0-9]
удовлетворяет любому символу, который не является буквой латинского алфавита и числом.
"Hey! How is it going?".match(/[A-Za-z0-9.]/) // ['H', index: 0]
"Hey! How is it going?".match(/[^A-Za-z0-9]/) // ['!', index: 3]
Классы символов (англ. character classes
) чем-то напоминают типы данных: они ограничивают область допустимых значений (в данном случае, область допустимых символов).
Говоря простыми словами, язык программирования - это средство коммуникации между программистом и компьютером. С помощью него программист может "рассказать" компьютеру, что нужно сделать (исполнить, выполнить) последнему.
В любой системе, где используются знаки, выделяют
Рассматривая любую знаковую систему (в том числе и язык программирования), обычно выделяют синтаксис -- правила построения сообщений в этой системе, семантику -- правила истолкования сообщений тем, кому они адресованы, а также прагматику, сопоставляющую сообщения желаниям того, от кого они исходят.