JS для начинающих. Урок 1.18: Использование регулярных выражений


JS для начинающих. Урок 1.18: Использование регулярных выражений

JS для начинающих. Урок 1.18: Использование регулярных выражений

JS для начинающих. Урок 1.18: Использование регулярных выражений

Метод search объекта String

Это, пожалуй, самый простой и малоинформативный метод объекта String для работы с регулярными выражениями.

Он принимает в качестве параметра регулярное выражение или строку, которая будет к нему преобразована и возвращает позицию подстроки, совпавшей с регулярным выражением или -1, если такой подстроки не нашлось.

 

В прошлом уроке мы также упоминали про флаги регулярных выражениях. Продемонстрируем использования флага i, который позволяет игнорировать регистр при поиске подстроки.

Обратим внимание на флаг m, который включает режим многострочного поиска. Продемонстрируем его использование.

Обратите внимание, на то, что символ $ расценивается как конец всего текста, если флаг m опущен, и как конец строки в противном случае.

Флаг g игнорируется в регулярном выражении, которое передаётся в качестве параметра методу search.

Метод split объекта String

Этот метод служит для разбиения строки на части. В качестве параметра он принимает разделитель, по которому будет производиться разбиение. Разделитель может быть, как и просто строкой, так и регулярным выражением. Для примера, давайте разрежем строку на части по запятым.

Теперь для разбиения строки воспользуемся регулярным выражением.

При использовании метода split так же можно ограничить количество частей, на которые разбивается строка. Для этого достаточно просто передать их максимальное количество в качестве второго параметра.

Meтод match объекта String

Этот метод более информативен, чем метод search. В качестве параметра он так же принимает регулярное выражение, или строку, которая к нему преобразуется. Результатом выполнения этого метода служит массив, содержащий результаты поиска. Если в регулярном выражении отсутствует флаг g, то поиск будет вестись только до первого совпадения. Массив результатов в качестве первого элемента будет содержать строку совпавшею со всем регулярным выражением, а в качестве последующих – подстроки, совпадающие с шаблонами в скобках. Так же массив результатов имеет свойство index, содержащие позицию первого совпавшего символа, и свойство input, которое ссылается на строку, в которой выполнялся поиск. Чтобы продемонстрировать это, давайте напишем функцию, которая выводит информацию о математическом выражении, и воспользуемся ей пару раз.

Если в регулярном выражении присутствует флаг g, то поиск осуществляется по всей строке и массив результатов содержит все подстроки, совпавшие с регулярным выражением, за исключением подстрок совпадающих с регулярными выражениями в скобках. Свойства index и input в этом случае у массива результатов отсутствуют.

Если подстрок удовлетворяющим регулярному выражению в строке не найдено, то метод возвращает null.

Метод replace объекта String

Этот метод служит для поиска с заменой. В качестве первого аргумента он принимает регулярное выражение, а в качестве второго строку замены. Если у регулярного выражения установлен флаг g, то метод заменяет все найденные совпадения, а в противном случае только первое.

Так же обратите внимание на присутствие во втором случаем флага i. Без него второе упоминание js не было бы найдено в строке.

Если в строке замены присутствует знак $ cо следующим за ним номером подвыражения в скобках, то метод replace заменяет эти символы на совпавшую с подвыражением строку. В качестве примера давайте поменяем местами операнды в строке с математическими выражениями.

Самый интересный случай использования этого метода, это когда в качестве второго аргумента передаётся функция замены. Эта функция в качестве первого параметра принимает совпавшую с регулярным выражением подстроку, затем следуют аргументы, которые содержат строки, совпавшие с подвыражениями в скобках, а в качестве последних двух аргументов функция принимает позицию первого совпавшего символа и строку, в которой производится замена.

Свойства объекта RegExp

У объекта RegExp есть пять свойств. Три из них содержат логические значения, которые свидетельствуют о наличии, или отсутствии у регулярного выражения флагов. Это свойства: ignoreCase, global и multiline. Имена соответствующих им флагов — это первая буква этих свойств. Давайте напишем код, который это демонстрирует.

У объекта RegExp так же есть свойство source, доступное только для чтения, в котором лежит строка с регулярным выражением.

И последние свойство объекта RegExp это свойство lastIndex, которое содержит индекс последней совпавшей с регулярным выражением подстроки. О нём мы поговорим далее.

Метод exec объекта RegExp

Этот метод аналогичен методу match объекта String, за исключением того, что это метод объекта RegExp, принимающий в качестве параметра строку, а не метод объекта String, принимающий в качестве параметра регулярное выражение. Так же, в отличие от match, этот метод всегда, вне зависимости от того установлен ли флаг g, возвращает массив, нулевым элементом которого является подстрока, совпавшая с регулярным выражением, а последующие элементы этого массива это строки, совпавшие с частями регулярного выражения в скобках. Возвращаемый массив полностью аналогичен тому, что возвращает метод match объекта String. У него так же присутствуют свойстваinput и index.

Однако наличие флага g в регулярном выражении всё-таки влияет на поведение метода exec. При отсутствии этого флага метод всегда оставляет свойство lastIndex регулярного выражения равным нулю. Если же этот флаг установлен, то в этом свойстве находится позиция последнего совпавшего с регулярным выражением символа. С этой позиции начнётся поиск, когда метод exec будет вновь вызван для этого же регулярного выражения.

Обратите внимание, что свойство lastIndex доступно для записи, что позволяет самому задать позицию, с которой будет производиться поиск совпадений.

Метод test объекта RegExp

Этот метод существует для проверки соответствуют ли строка регулярному выражению. Он возвращает true, если строка соответствует регулярному выражению и false в противном случае.

Этот метод также устанавливает свойство lastIndex если регулярное выражение имеет флаг g, и при следующем его вызове проверка совпадения начинается с новой позиции.

Объект RegExp и литералы регулярных выражений

Как упоминалось ранее, регулярные выражения можно создавать двумя способами: при помощи литералов регулярных выражений и при помощи конструктора объекта RegExp. Разные браузеры по-разному ведут себя с литералами регулярных выражений. Большинство современных браузеров создают новый объект RegExp, каждый раз, когда встречается литерал регулярного выражения, но возможно и ситуация, когда объект RegExpсоздаётся единожды в ходе синтаксического анализа. Эти различая очень важны, если вы используете методы объекта RegExp c флагом g и свойствоlastIndex.

На этом пока всё. Как всегда желаю вам успехов!

Previous Модальные окна с размытым фоном на CSS3
Next Нужные инструменты: подборка php библиотек

Suggested Posts

45 бесплатных адаптивных HTML5-шаблонов

18 советов и техник HTML5(Часть2)

Лучшие плагины CAPTCHA для вашего WordPress-сайта

OcStore 2.1 (OpenCart 2.1) улучшаем страницы товаров

15 новых и красивых JQuery сдайдеров

Скачать множество кнопок, стикеров, разнообразных элементов в PSD формате