Регуля́рные выраже́ния — язык для поиска подстрок в тексте, основанный на использовании специальных символов.
Шаблоны
Слеши /…/ говорят JavaScript о том, что это регулярное выражение, шаблоны поиска находятся между слешами.
/Витя/ — будет искать слово «Витя»
Флаги
Флаги (например g) пишут так: /…/g.
Регулярные выражения могут иметь флаги, которые влияют на поиск:
- i – находит большие и маленькие буквы;
- g – ищет все совпадения;
- m – многострочный поиск;
- s – точка и перевод строки одно и то же;
- u – поддержка Юникода;
- y – поиск на конкретной позиции.
str.match(/…/)
Метод .match() — ищет это /…/ в этом str, вот так str.match(/…/).
[js]
let str = "Эх ты, витя Витя";
alert (str.match ( /витя/gi ) ); // витя,Витя
[/js]
Найдет все совпадения, благодаря флагу /…/g , и найдет витю и Витю, благодаря флагу /…/i .
Символьные классы
Наиболее используемые:
- \d (digit – означает цифра);
- \s (space – пробелы, табуляции \t, перевода строки \n и другие символы \v, \f и \r );
- \w (word – слово, буква латинского алфавита или цифра или подчёркивание _ ).
Обратные символьные классы
Обратные символы соответствуют всем другим символам:
- \D (не цифра);
- \S (не пробел);
- \W (не буква).
Точка – это любой символ
. – соответствует любому символу, кроме новой строки.
Юникод
Если текст в формате Юникод, можно искать символы, указав их в \p{…} и обязательно использовать флаг u.
Например, \p{Letter} (или \p{L}) — обозначает букву в любом языке.
Основные категории символов и их подкатегории:
[su_spoiler title=»Здесь большой список» icon=»caret»]
- Буквы L:
- в нижнем регистре Ll,
- модификаторы Lm,
- заглавные буквы Lt,
- в верхнем регистре Lu,
- прочие Lo.
- Числа N:
- десятичные Nd,
- римские Nl,
- прочие No.
- Знаки пунктуации P:
- соединители Pc,
- тире Pd,
- открывающие кавычки Pi,
- закрывающие кавычки Pf,
- открывающие скобки Ps,
- закрывающие скобки Pe,
- прочее Po.
- Отметки M:
- двоеточия Mc,
- вложения Me,
- апострофы Mn.
- Символы S:
- валюты Sc,
- модификаторы Sk,
- математические Sm,
- прочие So.
- Разделители Z:
- линия Zl,
- параграф Zp,
- пробел Zs.
- Прочие C:
- контрольные Cc,
- форматирование Cf,
- не назначенные Cn,
- для приватного использования Co,
- суррогаты Cs.
[/su_spoiler]
Полный пример есть на этой странице.
Якоря: начало строки ^ и конец $
Начало строки ^ и конец $.
/^Hello/ — проверит, что строка начинается с Hello
Многострочный режим якорей ^ $, флаг «m»
Если поставить флаг m ( /…/m ), тогда якоря ^ и $ будут искать не только начало/конец текста, но и начало/конец каждой строки в тексте
/^\d/gm — будет искать все (g) первые цифры (^\d) в каждой строке (m)
Граница слова: \b
Граница слова \b – проверка, как ^ и $.
/\bJava\b/ — будет искать слово Java
Экранирование символов
Для поиска символов [ ] \ ^ $ . | ? * + ( ), чтобы они не сработали как спецсимволы поиска, нам нужно экранировать их — добавить перед ними \
«iOs 9.3».match(/\d\.\d/)
\d — найдет цифры
\. — найдет точку
Наборы
[абв] — найдет любой из 3-х символов: ‘a’, ‘б’ или ‘в’.
«ниф наф нуф».match(/н[иау]ф/gi) — найдет ниф,наф,нуф
Диапазоны
[a-z] – будет искать в диапазоне от a до z
[0-5] – цифра от 0 до 5
«Exception 0xAF».match(/x[0-9A-F][0-9A-F]/g) — будет искать «x» и после него два шестнадцатеричных символа 0,1,2…8,9,A,B,C,D,E,F
Исключающие диапазоны
Исключающие диапазоны пишутся так [^…].
[^abc] – любой символ, за исключением ‘a’, ‘b’, или ‘c’.
[^0-9] – любой символ, за исключением цифры.
Экранирование внутри […]
В квадратных скобках некоторые спец-символы можно использовать без экранирования:
- Символы . + ( ) не нужно экранировать никогда;
- Тире — не надо экранировать в начале или в конце;
- Символ каретки ^ нужно экранировать только в начале;