
Содержание
- Введение в регулярные выражения
- Сложно, по полезно
- Как выглядят регулярные выражения
- Как они работают?
- Закрепление
- Поиск элементов по диапазону
- Поиск многократных совпадений элемента диапазона
- Инверсия шаблона
- Выбор в регулярных выражениях
- Квантификаторы
- Опциональные элементы
- Группы
- Захват групп
- Использование match и exec без групп
- Незахватываемые группы
- Флаги
- Инспектирование регулярных выражений
- Экранирование
- Границы строк
- Замена с помощью регулярных выражений
- Жадность
- Опережение: соответствие строки в зависимости от того что за ней следует
- Ретроспектива: соответствие строки в зависимости от того что ей предшествует
- Регулярные выражения и Unicode
- Экранирование свойств Unicode
- Объект RegExp
- Спецсимволы в регулярном выражении
- Проверка результатов: метод test
- Поиск совпадений: метод exec
- Строковые методы, поиск и замена
- Статичные регэкспы
- Дополнительно
Введение в регулярные выражения
Регулярные выражения (RegExp) — это очень эффективный способ работы со строками.
Составив регулярное выражение с помощью специального синтаксиса вы можете:
- искать текст в строке
- заменять подстроки в строке
- извлекать информацию из строки
Почти во всех языках программирования есть регулярные выражения. Есть небольшие различия в реализации, но общие концепции применяются практически везде.
Регулярные выражения относятся к 1950-м годам, когда они были формализованы как концептуальный шаблон поиска для алгоритмов обработки строк.
Регулярные выражения реализованные в UNIX, таких как grep, sed и популярных текстовых редакторах, начали набирать популярность и были добавлены в язык программирования Perl, а позже и в множество других языков.
JavaScript, наряду с Perl, это один из языков программирования в котором поддержка регулярных выражений встроена непосредственно в язык.
Сложно, по полезно
Новичкам регулярные выражения могут показаться абсолютной ерундой, а зачастую даже и профессиональным разработчикам, если не вкладывать время необходимое для их понимания.
Регулярные выражения сложно писать, сложно читать и сложно поддерживать/изменять.
Но иногда регулярные выражения это единственный разумный способ выполнить какие-то манипуляции над строками, поэтому они являются очень ценным инструментом.
Это руководство нацелено на то чтобы самым простым способом дать вам некоторое представление о регулярных выражениях в JavaScript и предоставить информацию о том как читать и создавать регулярные выражения.
Эмпирическое правило заключается в том, что простые регулярные выражения просты для чтения и записи, в то время как сложные регулярные выражения могут быстро превратиться в беспорядок, если вы не глубоко понимаете основы.
Как выглядят регулярные выражения
В JavaScript регулярные выражения это объект, который может быть определён двумя способами.
Первый способ заключается в создании нового объекта RegExp с помощью конструктора:
Второй способ заключается в использовании литералов регулярных выражений:
Вы знаете что в JavaScript есть литералы объектов и литералы массивов? В нём также есть литералы regexp.
В приведённом выше примере hey называется шаблоном. В литеральной форме он находится между двумя слэшами, а в случае с конструктором объекта, нет.
Это первое важное отличие между двумя способами определения регулярных выражений, остальные мы увидим позже.
Как они работают?
Регулярное выражение, которое мы определили выше как re1 , очень простое. Оно ищет строку hey без каки-либо ограничений: строка может содержать много текста, а слово hey находиться где-то в середине и регулярное выражение сработает. Строка может содержать только слово hey и регулярка опять сработает.
Это довольно просто.
Вы можете попробовать протестировать регулярное выражение с помощью метода RegExp.test(String) , который возвращает логическое ( boolean ) значение:
В примере выше мы просто проверили удовлетворяет ли "hey" шаблону регулярного выражения, который храниться в re1 .
Это проще простого, но вы уже знаете много о регулярных выражениях.
Закрепление
сработает независимо от того где находится hey внутри строки.
Если вы хотите найти строки, которые начинаются с hey , то используйте оператор ^ :
Если вы хотите найти строки, которые заканчиваются на hey , то используйте оператор $ :
Объединяя два предыдущих оператора вы можете найти строку, которая полностью совпадает с hey :
Чтобы найти строку начинающуюся с одной подстроки, а заканчивающуюся другой подстрокой вы можете использовать .* , который будет совпадать с любым символом повторяющимся 0 или более раз:
Поиск элементов по диапазону
Вместо того чтобы искать определённую строку, вы можете указать диапазон символов, например:
Эти регулярные выражения ищут строки, которые содержат хотя бы один символ из выбранного диапазона:
Диапазоны можно комбинировать:
Поиск многократных совпадений элемента диапазона
Вы можете проверить содержит ли строка только один символ из диапазона с помощью символа — :
Инверсия шаблона
Символ ^ в начале шаблона привязывает его к началу строки.
Использование этого символа внутри диапазона инвертирует диапазон, поэтому:
Метасимволы
- d совпадает с любым числом, эквивалентно [0-9]
- D совпадает с любым символом, который не является числом, эквивалентно [^0-9]
- w совпадает с любым буквенно-числовым символом, эквивалентно [A-Za-z0-9]
- W совпадает с любым символом, который не является буквенно-числовым значением, эквивалентно [^A-Za-z0-9]
- s совпадает с любым пробельным символом: пробел, табуляция, символ новой строки и пробелы Unicode
- S совпадает с любым символом, который не является пробелом
