Вход/Регистрация
JavaScript. Подробное руководство, 6-е издание
вернуться

Флэнаган Дэвид

Шрифт:

Эти флаги могут объединяться в любые комбинации. Например, чтобы выполнить поиск первого вхождения слова «java» (или «Java», «JAVA» и т. д.) без учета регистра символов, можно воспользоваться нечувствительным к регистру регулярным выражением /\Ьj ava\b/i. А чтобы найти все вхождения этого слова в строке, можно добавить флаг g: /\bjava\b/gi.

В табл. 10.6 приводится перечень флагов регулярных выражений. Заметим, что флаг

g
более подробно рассматривается далее в этой главе вместе с методами классов
String
и
RegExp
, используемых для фактической реализации поиска.

10.2. Методы класса String для поиска по шаблону

До этого момента мы обсуждали грамматику создаваемых регулярных выражений, но не рассматривали, как эти регулярные выражения могут фактически использоваться в JavaScript-сценариях. В данном разделе мы обсудим методы объекта

String
, в которых регулярные выражения применяются для поиска по шаблону, а также для поиска с заменой. А затем продолжим разговор о поиске по шаблону с регулярными выражениями, рассмотрев объект
RegExp
, его методы и свойства. Обратите внимание, что последующее обсуждение - лишь обзор различных методов и свойств, относящихся к регулярным выражениям. Как обычно, полное описание можно найти в третьей части книги.

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

search.
Он принимает в качестве аргумента регулярное выражение и возвращает либо позицию первого символа найденной подстроки, либо
– 1
, если соответствие не найдено. Например, следующий вызов вернет 4:

"JavaScript".search(/scгіpt/i);

Если аргумент метода

search
не является регулярным выражением, он сначала преобразуется путем передачи конструктору
RegExp
. Метод
search
не поддерживает глобальный поиск и игнорирует флаг
g
в своем аргументе.

Метод

replace
выполняет операцию поиска с заменой. Он принимает в качестве первого аргумента регулярное выражение, а в качестве второго - строку замены.

Метод отыскивает в строке, для которой он вызван, соответствие указанному шаблону. Если регулярное выражение содержит флаг

g
, метод
герlасе
заменяет все найденные совпадения строкой замены. В противном случае он заменяет только первое найденное совпадение. Если первый аргумент метода
герlасе
является строкой, а не регулярным выражением, то метод выполняет буквальный поиск строки, а не преобразует его в регулярное выражение с помощью конструктора
RegExp,
как это делает метод
search.
В качестве примера мы можем воспользоваться методом
replace
для единообразной расстановки прописных букв в слове «JavaScript» для всей строки текста:

// Независимо от регистра символов заменяем словом в нужном регистре

text.replace(/JavaScript/gi, "JavaScript");

Метод

replace
представляет собой более мощное средство, чем можно было бы предположить по этому примеру. Напомню, что подвыражения в скобках, находящиеся внутри регулярного выражения, нумеруются слева направо, и что регулярное выражение запоминает текст, соответствующий каждому из подвыражений. Если в строке замены присутствует знак
$
с цифрой, метод
replace
заменяет эти два символа текстом, соответствующим указанному подвыражению. Это очень полезная возможность. Мы можем использовать ее, например, для замены прямых кавычек в строке типографскими кавычками, которые имитируются ASCII-символами:

// Цитата - это кавычка, за которой следует любое число символов, отличных от кавычек

// (их мы запоминаем), за этими символами следует еще одна кавычка,

var quote = /'([~"]*/g;

// Заменяем прямые кавычки типографскими и оставляем без изменений

// содержимое цитаты, хранящееся в $1.

text. replace(quote, "«$1»");

Метод

replace
предоставляет и другие ценные возможности, о которых рассказывается в третьей части книги, в справке к методу
String.replace.
Самое важное, что следует отметить, - второй аргумент
replace
может быть функцией, динамически вычисляющей строку замены.

Метод

match
– это наиболее общий из методов класса
String
, использующих регулярные выражения. Он принимает в качестве единственного аргумента регулярное выражение (или преобразует свой аргумент в регулярное выражение, передав его конструктору
RegExp
) и возвращает массив, содержащий результаты поиска. Если в регулярном выражении установлен флаг g, метод возвращает массив всех соответствий, присутствующих в строке. Например:

"1 плюс 2 равно 3".match(/\d+/g) // вернет ["1", "2", "3"]

Если регулярное выражение не содержит флаг

g
, метод
match
не выполняет глобальный поиск; он просто ищет первое совпадение. Однако
match
возвращает массив, даже когда метод не выполняет глобальный поиск. В этом случае первый элемент массива - это найденная подстрока, а все оставшиеся элементы представляют собой подвыражения регулярного выражения. Поэтому если
match
возвращает массив а, то а[0] будет содержать найденную строку целиком, а[1] -подстроку, соответствующую первому подвыражению, и т. д. Проводя параллель с методом
replace,
можно сказать, что в а[n] заносится содержимое $n.

  • Читать дальше
  • 1
  • ...
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: