Регулярнеые выражения -это механизм для поиска и замены текста. В строке, файле, нескольких файлах. Их используют разработчики в коде приложения, тестировщики в автотестах, да и просто при работе в командной строке.
Любое регулярное выражение состоит из двух частей.
Паттерн
- по сути шаблон, шаблон что мы ищем в строке, или что пытаемся удалить и тд.
Флаг
- они влияют на поиск, есть 3 классических флага:
i
- если мы хотим что то найти вне зависимости регистра.
g
- когда пытаемся найти несколько вхождений.
m
- включает многострочный режим. Строки могут быть и с переносами, тут флагm
нам и пригодиться.
Так же их можно комбинировать
/n/igm
- вот так
Что бы создать регулярное выражение мы можем пользоваться несколькими способами:
Первый вариант это при помощи конструктора(не используется в 99%)
new RegExp('pattern','flags');
Второй более короткий вариант:
/pattern/flags;
Регулярные выражения мы можем просто добавить в переменную и потом пользоваться.
const newRegExp = /pattern/flags;
Некоторые методы строк которые работают с регулярными выражениями.
Этот метод очень простой и ищет всегда первое совпадение.
const name = 'Дима';
const reg = /д/i; // создадим выражение отдельно в переменной
// используем метод search(тут наше рег выражение)
console.log(name.search(reg)); // 0
// мы ввели Дима и получили в консоль 0 - это индекс по которому мы нашли первый результат. Если искомого элемента не будет получим -1
Для того что бы найти все искомые элементы или все в незовисимости большая или маленькая и тд, для этого используются флаги.
Мы использовали флаг i
и искали вне зависимости регистра.
Попробуем без него:
const name = 'Дима';
const reg = /д/;
console.log(name.search(reg)); // -1
Этот метод вернет массив с кусочком строки который искали, с его индексом, и самой строкой
const name = 'Дима';
const reg = /д/i;
console.log(name.match(reg)); // [ 'Д', index: 0, input: 'Дима', groups: undefined ]
// у вас может быть свойство groups, а может и не быть, в зависимости от вашего браузера, не обращайте на него внимание.
Этим методом мы можем что-то заменить, есть два главных аргумента:
// с помощью replace и рег выр уберем все дифисы в строке
console.log('12-30-56'.replace(/-/g,'')); // 123056
Точка в регулярных выражениях значит, что мы берем все элементы которые попадут в строку.
const pass = 'ПАРОЛЬы';
console.log(pass.replace(/./g, "*")); // *******
А что бы поставить саму точку, нужно экранировать ее поставить обратный слеш \
- он указывает что дальше идет не спец символ.
const pass = 'ПАРОЛЬы.'; // поставим точку в конце, для примера
// заменим только точку в конце
console.log(pass.replace(/\./g, "*")); // ПАРОЛЬы*
Это уже метод самого объекта регулярного выражения. Он проверяет есть ли в рег выражение то что мы ищем.
То есть если мы ищем маленькие буквы n
и в имени оно есть и рег выр срабатывает, то нам вернет true
если нет то false
const name = 'Дима';
const reg = /д/i;
console.log(reg.test(name)); // true
// Тут рег выражение без переменной
console.log(/ы/i.test(name)); // false
Если нам нужно искать целый класс символов, например слова или цифры или пробелы для этого в регулярных выражениях есть понятие классы.
\d
- ищем цифры\w
- ищем все слова(буквы)\s
- ищем все пробелыТак же есть обратные классы.
\D
- ищем не числа\W
- ищем не буквы\S
- Ищем не пробелыconst num = '100s';
const regN = /\d/g;
console.log(num.match(regN)); // [ '1', '0', '0' ]
// получили только цифры без буквы s
Мы можем все это комбинировать как душе угодно.
const str = 'This is A1B2 1';
console.log(str.match(/\w\d\w\d/i)); // мы полуим A1B2
// получим все пробелы из текста.
console.log(str.match(/\s/ig)); // [ ' ', ' ', ' ' ]
// хотим получить цифру с пробелом перед ней? легко
console.log(str.match(/\s\d/ig)); // [ ' 1' ]
// тоже самое но с классом S - ищем цифры перед которыми не пробел
console.log(str.match(/\S\d/ig)); // [ 'A1', 'B2' ]
И так далее. Регулярные выражения довольно сложная тема, если разбираться подробно. Но об этом лучше уже почитать где нибудь на MDN