Дэвид Флэнаган - JavaScript. Подробное руководство, 6-е издание
- Название:JavaScript. Подробное руководство, 6-е издание
- Автор:
- Жанр:
- Издательство:Символ-Плюс
- Год:2012
- Город:СПб
- ISBN:978-5-93286-215-5
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Дэвид Флэнаган - JavaScript. Подробное руководство, 6-е издание краткое содержание
Эта книга - одновременно и руководство программиста, и полноценный справочник по базовому языку JavaScript и клиентским прикладным интерфейсам, предоставляемым веб-броузерами.
JavaScript. Подробное руководство, 6-е издание - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
Метод 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);
}
Еще один метод объекта RegExp - test(),
который намного проще метода ехес().
Он принимает строку и возвращает true
, если строка соответствует регулярному выражению:
var pattern = /java/і;
pattern.test("JavaScript"); // Вернет true
Вызов test()
эквивалентен вызову exec(),
возвращающему true, если exec()
возвращает не null
. По этой причине метод test()
ведет себя так же, как метод ехес()
при вызове для глобального регулярного выражения: он начинает искать указанную строку с позиции, заданной свойством lastlndex
, и если находит соответствие, устанавливает свойство lastlndex
равным номеру позиции символа, непосредственно следующего за найденным соответствием. Поэтому с помощью метода test()
можно так же сформировать цикл обхода строки, как с помощью метода ехес().
Интервал:
Закладка: