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

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

Жанры

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

Например, взгляните на следующий программный код, выполняющий разбор URL-адреса:

var url = /(\w+):\/\/([\w.]+)\/(\S*)/;

var text = "Посетите мою домашнюю страницу http://www.exarnple.com/"david ";

var result = text.match(url);

if (result != null) {

var fullurl = result[0]; // Содержит " http://www.example.com/"david "

var protocol = result[1]; // Содержит "http"

var host = result[2]; // Содержит " www.example.com "

var path = result[3]; //
Содержит "david"

}

Следует отметить, что для регулярного выражения, в котором не установлен флаг

g
глобального поиска, метод
match
возвращает то же значение, что и метод
ехес
регулярного выражения: возвращаемый массив имеет свойства
index
и
input
, как описывается в обсуждении метода
ехес
ниже.

Последний из методов объекта

String
, в котором используются регулярные выражения, -
split.
Этот метод разбивает строку, для которой он вызван, на массив подстрок, используя аргумент в качестве разделителя. Например:

"123,456,789".split(","); // Вернет ["123","456","789"]

Метод

split
может также принимать в качестве аргумента регулярное выражение. Это делает метод более мощным. Например, можно указать разделитель, допускающий произвольное число пробельных символов с обеих сторон:

"1, 2, 3 , 4 , 5".split(/\s*,\s*/); // Вернет ["1","2","З","4","5"]

Метод

split
имеет и другие возможности. Полное описание приведено в третьей части книги при описании метода
String. split.

10.3. Объект RegExp

Как было упомянуто в начале этой главы, регулярные выражения представлены в виде объектов

RegExp
. Помимо конструктора
RegExp,
объекты
RegExp
поддерживают три метода и несколько свойств. Методы поиска и свойства класса
RegExp
описаны в следующих двух подразделах.

Конструктор

RegExp
принимает один или два строковых аргумента и создает новый объект
RegExp
. Первый аргумент конструктора - это строка, содержащая тело регулярного выражения, т. е. текст, который должен находиться между символами слэша в литерале регулярного выражения. Обратите внимание, что в строковых литералах и регулярных выражениях для обозначения управляющих последовательностей используется символ
\
, поэтому, передавая конструктору
RegExp
регулярное выражение в виде строкового литерала, необходимо заменить каждый символ
\
парой символов
\\
. Второй аргумент
RegExp
может отсутствовать. Если он указан, то определяет флаги регулярного выражения. Это должен быть один из символов
g, i, m
либо комбинация этих символов. Например:

// Находит все пятизначные числа в строке. Обратите внимание

// на использование в этом примере символов \\

var zipcode = new RegExp(\\d{5}, "g");

Конструктор

RegExp
удобно использовать, когда регулярное выражение создается динамически и поэтому не может быть представлено с помощью синтаксиса литералов регулярных выражений. Например, чтобы найти строку, введенную, пользователем, надо создать регулярное выражение во время выполнения с помощью
RegExp.

10.3.1. Свойства RegExp

Каждый объект

RegExp
имеет пять свойств. Свойство
source
– строка, доступная только для чтения, содержащая текст регулярного выражения. Свойство
global
– логическое значение, доступное только для чтения, определяющее наличие флага
g
в регулярном выражении.
Свойство
ignoreCase
– это логическое значение, доступное только для чтения, определяющее наличие флага
і
в регулярном выражении. Свойство
multiline
– это логическое значение, доступное только для чтения, определяющее наличие флага
m
в регулярном выражении. И последнее свойство
lastlndex
– это целое число, доступное для чтения и записи. Для шаблонов с флагом
g
это свойство содержит номер позиции в строке, с которой должен быть начат следующий поиск. Как описано ниже, оно используется методами
ехес
и
test.

10.3.2. Методы RegExp

Объекты

RegExp
определяют два метода, выполняющие поиск по шаблону; они ведут себя аналогично методам класса
String
, описанным выше. Основной метод класса
RegExp
, используемый для поиска по шаблону, -
ехес.
Он похож на упоминавшийся метод
match
класса
String
, за исключением того, что является методом класса
RegExp
, принимающим в качестве аргумента строку, а не методом класса
String
, принимающим аргумент
RegExp
. Метод
ехес
выполняет регулярное выражение для указанной строки, т. е. ищет совпадение в строке. Бели совпадение не найдено, метод возвращает
null
. Однако если соответствие найдено, он возвращает такой же массив, как массив, возвращаемый методом
match
для поиска без флага
g
. Нулевой элемент массива содержит строку, соответствующую регулярному выражению, а все последующие элементы - подстроки, соответствующие всем подвыражениям. Кроме того, свойство
index
содержит номер позиции символа, которым начинается соответствующий фрагмент, а свойство
input
ссылается на строку, в которой выполнялся поиск.

В отличие от

match,
метод
ехес
возвращает массив, структура которого не зависит от наличия в регулярном выражении флага
g
. Напомню, что при передаче глобального регулярного выражения метод
match
возвращает массив найденных соответствий. А
ехес
всегда возвращает одно соответствие, но предоставляет о нем полную информацию. Когда
ехес
вызывается для регулярного выражения, содержащего флаг
g
, метод устанавливает свойство
lastlndex
объекта регулярного выражения равным номеру позиции символа, следующего непосредственно за найденной подстрокой. Когда метод
ехес
вызывается для того же регулярного выражения второй раз, он начинает поиск с символа, позиция которого указана в свойстве
lastlndex
. Если
ехес
не находит соответствия, свойство
lastindex
получает значение 0. (Вы также можете установить
lastlndex
в ноль в любой момент, что следует делать во всех тех случаях, когда поиск завершается до того, как будет найдено последнее соответствие в одной строке, и начинается поиск в другой строке с тем же объектом
RegExp
.) Это особое поведение позволяет вызывать
exec
повторно для перебора всех соответствий регулярному выражению в строке. Например:

var pattern = /Java/g;

var text = "JavaScript - это более забавная штука, чем Java!";

var result;

while((result = pattern.exec(text)) != null) {

alert("Найдено '" + result[0] + ..... +

в позиции " + result.index +

"; следующий поиск начнется с " + pattern.lastlndex);

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

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

Гавриил Одинокий
Старинная литература:
прочая старинная литература
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