Коротко о регулярных выражениях
23 сентября 2023 г.
Прекрасный ресурс для тестирования регулярных выражений https://regexr.com/. Вы можете указать нужный текст для проверки и смотреть, что находят введенные вами регулярные выражения моментально. Ресурс дает подсказки для любых элементов выражения о том, что элемент делает.
Флаги
g - все совпадения в тексте. Если его не указывать, вернет первое совпадение в тексте.
i - (case insensitive) чувствительность к регистру.
m - multiline. Искать совпадения в начале/конце строки в отрезке, а не самого текстового отрезка.
Кванторы
+ - 1 или больше элементов к которому он применяется. Пример: cовпади как минимум с одной e но с таким количеством, с каким можешь в строке - /e+/g.
? - опциональный элемент. То есть, например, в выражении /ea?/g, буква а - опциональна, поэтому возвращаются как е так и еа.
точка перед выражением - любой символ перед указанным, после - соответственно после, включая сам символ. Не совпадает с переносом строки.
{4} - найти 4 указанных элемента.
{4, } - 4 или больше.
{1, 5} - от одного до пяти.
Элементы
. - все элементы, кроме переноса строки
\w - любая буква
\W - все кроме букв
\s - пробелы
\S - все кроме пробелов
\d - цифра
\D- не цифра
\xhh - Шестнадцатеричный символ hh
\Oxxx - Восьмеричный символ xxx
Примеры:
Группировка
[abc] - Диапазон (a или b или c)
[^abc] - Не a, не b и не c
[a-q] - Буква между a и q
[A-Q]- Буква в верхнем регистре между A и Q
[0-7] - Цифра между 0 и 7
() - Группирует несколько токенов вместе. Создает группу захвата для извлечения подстроки или использования обратной ссылки.
(a|b) - a или b
?: Группирует несколько токенов вместе без создания группы захвата.
Например, Если мы не будем использовать группировку, то в выражении /al{1,3}/gi квантор применится только к букве l. Чтобы применить его в сочетанию букв al необходимо группировать его /(al){1,3}/gi.
Примеры:
Якоря
^ - Искать с начала отрезка (строки, если установлен флаг m)
$ - искать в конце отрезка (с флагом multiline в конце каждой строки)
\< Начало слова
\> - Конец слова
\A - Начало текста
\Z - Конец текста
\b- Граница слова
\B - Не граница слова
Примеры:
1const string =2 "Alice was born on January 15, 1990, and her email address is alice@email.com. Bob, on the other hand, was born on March 5, 1985, and his email address is bob@email.com. They both love programming and often visit websites like www.example.com and www.samplewebsite.org.";34console.log(string.match(/^a/gi));5// return [ 'A' ]67console.log(string.match(/\.$/g));8// return [ '.' ]
Утверждения
Назад смотрящее (lookbehind )
(?<=) позитивная - то, что находится после указанной комбинации, не включая ее в результат. Может поддерживаться не всеми браузерами.
(?<!) - Отрицательная
Например /(?<=[tT]he)./g вернет нам элементы после the, а /(?<![tT]he)./g все элементы, кроме тех, которые идут после the.
Вперед смотрящее (lookahead)
?= позитивное. Находит то, что находится перед выражением, не включая его.
?! Отрицательное. Включает в себя все, кроме того, что находится перед выражением.
Примеры:
1console.log(`email`.match(/(?<=ma)./g));2// return [ 'i' ]34console.log(`email`.match(/.(?=ma)/g));5// return [ 'e' ]
Работа с регулярными выражениями
Метод строки .replace()
С его помощью мы можем найти определенные символы и заменить их в строке.
1const someString = `This is a test string with numbers (123) and symbols @#$. It also has words like "apple" and "banana." The temperature is 65°F.`;23console.log(someString.replace(/["()]/g, ""));4// return This is a test string with numbers 123 and symbols @#$. It also has words like apple and banana. The temperature is 65°F.
Метод строки .match()
Выполняет поиск совпадения в строке. Если совпадение есть то возвращает массив, если нет то null.
1const someString = `This is a test string with numbers (123) and symbols @#$. It also has words like "apple" and "banana." The temperature is 65°F.`;23console.log(someString.match(/[tT]h(is|e)/g));4// return [ 'This', 'The' ]
Метод строки .search()
Тестирует на совпадение в строке. Возвращает индекс первого совпадения. Если совпадения не будут найдены, вернет -1.
1const someString = `This is a test string with numbers (123) and symbols @#$. It also has words like "apple" and "banana." The temperature is 65°F.`;23console.log(someString.search(/\d/));4// return 36
Метод строки .split()
С помощью регулярного выражения можем разбить строку на подстроки.
1const someString = `The temperature is 65°F.`23console.log(someString.split(/\s/));4// return [ 'The', 'temperature', 'is', '65°F.' ]
Метод регулярного выражения .test()
Ищет совпадение в строке с указанным регулярным выражением и возвращает true или false.
1const someString = `This is a test string with numbers (123) and symbols @#$. It also has words like "apple" and "banana." The temperature is 65°F.`;23const regExp = /\d/g;4console.log(regExp.test(someString)); //true
Метод регулярного выражения .exec()
Также ищет совпадение в строке, но в отличие от test() возвращает массив с первым совпадением или же null.
1const someString = `This is a test string with numbers (123) and symbols @#$. It also has words like "apple" and "banana." The temperature is 65°F.`;23console.log(regExp.exec(someString));4// return [5// '(',6// index: 35,7// input: 'This is a test string with numbers (123) and symbols @#$. It also has words like "apple" and "banana." The temperature is 65°F.',8// groups: undefined9// ]