Регулярные выражения - объекты, которые описывают набор символов или символьный шаблон, который можно использовать для поиска подстрок в к-л тексте.
Это просто язык для описания шаблонов, которые задают правила поиска в тексте.
Сервис: http://regexr.com/
Если убрать флаг global, то найдется только первое совпадение и поиск прекратится.
Если поставим флаг ignore case, то включим регистронезависимый поиск.
В JS поддерживается флаг multiline. Он имеет смысл только для пределенного набора символов.
Мы можем увидеть, как будет выглядеть литерал регулярного выражения в JS: /that/ig
Литералы регулярных выражений выделяются слешами.
После закрывающего слеша могут быть прописаны флаги.
При помощи квадраных скобок [] мы можем объединять символы в классы.
[aoeiuy] - так мы найдем все глассные в тексте.
Также поддерживаются диапазоны, для определения которых используется дифис.
Такой шаблон [A-Z] найдет все заглавные буквы в тексте. Сюда можно добавить все строчные буквы [a-zA-Z]
Здесь могуть быть все строчные буквы от a до e - [a-e]
Также мы можем указать диапазоны цифр [0-6]
Так ищется все, что не входит в этот класс [^0-9], т.е символы, которых нет внутри [].
Существуют удобные сокращения:
\d = [0-9], т.е цифры
\D - любой символ, кроме цифр.
\w - найдет все символы, которы являются буквами или цифрами.
\W - все символы, которы не являются буквами или цифрами. Пробелы, точки, запятые, дифисы.
\s - находит все пустые символы (пробелы, табуляции и переносы строк).
\S - находит все, что не является пустыми символами.
\b - граница слова.
Если мы напишем an, то найдем все слова, например anything.
\ban\b - найдем только артикли an.
\Ban\B - находит an только в середине слова. Например, want
Используем лоическое или |
\Ban|an\B - ищем an, с которого не начинается слово, либо an, которым не заканчиватся слово. Например, want
Найдем слова me и and \bme\b|\band\b
Например, нам нужно найти слова gray и grey. Пишем grey|gray или gr(e|a)y или gr[ae]y
Найдем оба слова center и centre: cent(er|re)
Найдем color и colour: colou?r
? - означает, что символ u необязателен.
. точка выделяет любой символ, кроме переноса строк.
Если нужно найти символ . мы должные экранировать ее обратным слешем: \.
Синтаксис для повторений.
Например, мы хотим найти слово, которое начинается с а и кончается е
Можна написать так a....e Например, будет найдено слово happened
Но можно избежать повторений: a.{4}e
Запись вида a.{2,6}e означает, что символ повторятся от 2 до 6 раз.
Повторения могут быть жадными и нежадными. По умолчанию все посторения жадные.
Сделать посторение нежадным можно знаком вопроса: a.{2,6}?e
Нежадное означает, что после буквы идет наименьшее кол-во символов.
Жадное означает, что после буквы идет настолько большое кол-во символов, насколько это возможно.
Повторение от 1 и более раз записыватеся так: a.{1,}?e
Повторение от 1 и более раз можно записать сокращенно: a.+?e
Повторение от 0 и более раз можно записать сокращенно: a.*?e
МЕТАСИМВОЛЫ
Например, \b, ^, $
Найдем точки в середине строк: \.$
Вперед смотрящее утверждение и вперед смотрящее отрицание.
Например, найдем and после которого есть слово he: and(?= he) При этом мэтчится слово and, что удобно.
Найдем все слова, после которых идет and: \b\w+?\b(?=[\s.]*?and)
Найдем все слова to, после которых нет слова know: \bto\b(?! know)
Lookbehind, т.е назад смотрящее утверждение, которая проверяет есть ли что-то перед строкой. Но в JS такого нет.
ГРУППЫ.
Найдем мейлы и вытащим из них имена яшиков и домены: \b\w+@\w+\.\w+\b
(\b\w+)@(\w+\.\w+\b)
Первая группа - все до символа @ и вторая все, что идет после него.
Например, в тексте есть слова java и javascript и мы хотим найти оба слова:
java(script)?
? означает, что это необязательная часть
? эквивалентен {0,1} - повторение от 0 до 1 раза
Чтобы не было запоминающей группы, напишем так: java(?:script)?
Сервис, который визуализирует регулярные варажения: https://regexper.com/
Регулярное выражение для url: (?:(\w+):\/\/)?([^/]+)(.+)?
Это просто язык для описания шаблонов, которые задают правила поиска в тексте.
Сервис: http://regexr.com/
Если убрать флаг global, то найдется только первое совпадение и поиск прекратится.
Если поставим флаг ignore case, то включим регистронезависимый поиск.
В JS поддерживается флаг multiline. Он имеет смысл только для пределенного набора символов.
Мы можем увидеть, как будет выглядеть литерал регулярного выражения в JS: /that/ig
Литералы регулярных выражений выделяются слешами.
После закрывающего слеша могут быть прописаны флаги.
При помощи квадраных скобок [] мы можем объединять символы в классы.
[aoeiuy] - так мы найдем все глассные в тексте.
Также поддерживаются диапазоны, для определения которых используется дифис.
Такой шаблон [A-Z] найдет все заглавные буквы в тексте. Сюда можно добавить все строчные буквы [a-zA-Z]
Здесь могуть быть все строчные буквы от a до e - [a-e]
Также мы можем указать диапазоны цифр [0-6]
Так ищется все, что не входит в этот класс [^0-9], т.е символы, которых нет внутри [].
Существуют удобные сокращения:
\d = [0-9], т.е цифры
\D - любой символ, кроме цифр.
\w - найдет все символы, которы являются буквами или цифрами.
\W - все символы, которы не являются буквами или цифрами. Пробелы, точки, запятые, дифисы.
\s - находит все пустые символы (пробелы, табуляции и переносы строк).
\S - находит все, что не является пустыми символами.
\b - граница слова.
Если мы напишем an, то найдем все слова, например anything.
\ban\b - найдем только артикли an.
\Ban\B - находит an только в середине слова. Например, want
Используем лоическое или |
\Ban|an\B - ищем an, с которого не начинается слово, либо an, которым не заканчиватся слово. Например, want
Найдем слова me и and \bme\b|\band\b
Например, нам нужно найти слова gray и grey. Пишем grey|gray или gr(e|a)y или gr[ae]y
Найдем оба слова center и centre: cent(er|re)
Найдем color и colour: colou?r
? - означает, что символ u необязателен.
. точка выделяет любой символ, кроме переноса строк.
Если нужно найти символ . мы должные экранировать ее обратным слешем: \.
Синтаксис для повторений.
Например, мы хотим найти слово, которое начинается с а и кончается е
Можна написать так a....e Например, будет найдено слово happened
Но можно избежать повторений: a.{4}e
Запись вида a.{2,6}e означает, что символ повторятся от 2 до 6 раз.
Повторения могут быть жадными и нежадными. По умолчанию все посторения жадные.
Сделать посторение нежадным можно знаком вопроса: a.{2,6}?e
Нежадное означает, что после буквы идет наименьшее кол-во символов.
Жадное означает, что после буквы идет настолько большое кол-во символов, насколько это возможно.
Повторение от 1 и более раз записыватеся так: a.{1,}?e
Повторение от 1 и более раз можно записать сокращенно: a.+?e
Повторение от 0 и более раз можно записать сокращенно: a.*?e
МЕТАСИМВОЛЫ
Например, \b, ^, $
Найдем точки в середине строк: \.$
Вперед смотрящее утверждение и вперед смотрящее отрицание.
Например, найдем and после которого есть слово he: and(?= he) При этом мэтчится слово and, что удобно.
Найдем все слова, после которых идет and: \b\w+?\b(?=[\s.]*?and)
Найдем все слова to, после которых нет слова know: \bto\b(?! know)
Lookbehind, т.е назад смотрящее утверждение, которая проверяет есть ли что-то перед строкой. Но в JS такого нет.
ГРУППЫ.
Найдем мейлы и вытащим из них имена яшиков и домены: \b\w+@\w+\.\w+\b
(\b\w+)@(\w+\.\w+\b)
Первая группа - все до символа @ и вторая все, что идет после него.
Например, в тексте есть слова java и javascript и мы хотим найти оба слова:
java(script)?
? означает, что это необязательная часть
? эквивалентен {0,1} - повторение от 0 до 1 раза
Чтобы не было запоминающей группы, напишем так: java(?:script)?
Сервис, который визуализирует регулярные варажения: https://regexper.com/
Регулярное выражение для url: (?:(\w+):\/\/)?([^/]+)(.+)?
Комментариев нет:
Отправить комментарий