Чтение онлайн

на главную - закладки

Жанры

JavaScript. Подробное руководство, 6-е издание
Шрифт:

Если же ввести условие

(?!
, то это будет негативная опережающая проверка на последующие символы, требующая, чтобы следующие символы не соответствовали указанному шаблону. Например, шаблону
/Java(?!Script)([A-Z]\w*)/
соответствует подстрока «Java», за которой следует заглавная буква и любое количество текстовых ASCII-символов при условии, что за подстрокой «
Java
» не следует подстрока «
Script
». Он совпадет со строкой «
JavaBeans
», но не совпадет со строкой «Javanese», совпадет со строкой «JavaScrip», но не совпадет со строками «JavaScript» или «JavaScripter».

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

10.1.6.

Флаги

И еще один, последний элемент грамматики регулярных выражений. Флаги регулярных выражений задают высокоуровневые правила соответствия шаблонам. В отличие от остальной грамматики регулярных выражений, флаги указываются не между символами слэша, а после второго из них. В языке JavaScript поддерживается три флага. Флаг

і
указывает, что поиск по шаблону должен быть нечувствителен к регистру символов, а флаг
d
– что поиск должен быть глобальным, т. е. должны быть найдены все соответствия в строке. Флаг
m
выполняет поиск по шаблону в многострочном режиме. Если строковое выражение, в котором выполняется поиск, содержит символы перевода строк, то в этом режиме якорные символы ^ и $, помимо того, что они соответствуют началу и концу всего строкового выражения, также соответствуют началу и концу каждой текстовой строки. Например, шаблону
/java$/im
соответствует как слово «
java
», так и «
Java\nis fun
».

Эти флаги могут объединяться в любые комбинации. Например, чтобы выполнить поиск первого вхождения слова «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.

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

Место под солнцем

Гавриил Одинокий
Старинная литература:
прочая старинная литература
6.00
рейтинг книги
Место под солнцем

Российская империя в сравнительной перспективе

Коллектив авторов
Научно-образовательная:
история
политика
5.00
рейтинг книги
Российская империя в сравнительной перспективе

Цикл "Идеальный мир для Лекаря". Компиляция. Книги 1-30

Сапфир Олег
Лекарь
Фантастика:
боевая фантастика
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Цикл Идеальный мир для Лекаря. Компиляция. Книги 1-30

Неучтенный. Дилогия

Муравьёв Константин Николаевич
Неучтенный
Фантастика:
боевая фантастика
попаданцы
7.98
рейтинг книги
Неучтенный. Дилогия

Каратила

Поповский Андрей Владимирович
Детективы:
боевики
6.50
рейтинг книги
Каратила

Лекарь Империи 2

Карелин Сергей Витальевич
2. Лекарь Империи
Фантастика:
городское фэнтези
аниме
дорама
фэнтези
попаданцы
5.80
рейтинг книги
Лекарь Империи 2

Лекции профессора Московской Духовной Академии А. И. Осипова

Осипов Алексей Ильич
Религия и эзотерика:
религия
5.00
рейтинг книги
Лекции профессора Московской Духовной Академии А. И. Осипова

Точка Бифуркации

Смит Дейлор
1. ТБ
Фантастика:
боевая фантастика
7.43
рейтинг книги
Точка Бифуркации

Рассказы старых переплетов

Белоусов Роман Сергеевич
Документальная литература:
биографии и мемуары
прочая документальная литература
5.00
рейтинг книги
Рассказы старых переплетов

Информационные технологии в СССР. Создатели советской вычислительной техники

Малиновский Борис Николаевич
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Информационные технологии в СССР. Создатели советской вычислительной техники

Сын Петра. Том 1. Бесенок

Ланцов Михаил Алексеевич
1. Сын Петра
Фантастика:
попаданцы
альтернативная история
6.80
рейтинг книги
Сын Петра. Том 1. Бесенок

Восточный массаж

Ханников Александр Александрович
Дом и Семья:
здоровье и красота
7.00
рейтинг книги
Восточный массаж

Эпоха Опустошителя. Том V

Павлов Вел
5. Вечное Ристалище
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Эпоха Опустошителя. Том V

Газлайтер. Том 9

Володин Григорий Григорьевич
9. История Телепата
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Газлайтер. Том 9