Объект - регулярное выражение, содержащий патэрн регулярного выражения. Он имеет свойства и методы для использования этого регулярного выражения при поиске и замене совпадений в строках.
Помимо свойств отдельного объекта регулярного выражения, который Вы создаёте
через использование функции-конструктора RegExp, предопределённый
объект RegExp имеет static-свойства, которые устанавливаются всякий
раз при использовании любого регулярного выражения.
JavaScript 1.3: добавлен метод | |
Формат текста литерала функции-конструктора RegExp.
Формат литерала используется так:
/pattern/flags
Функция-конструктор используется так:
new RegExp("pattern"[, "flags"])pattern | |
flags |
Заметьте, что параметры формата литерала не используют знаки кавычек для обозначения строк, а параметры функции-конструктора - используют. Так, следующие выражения создают одно регулярное выражение:
/ab+c/i
new RegExp("ab+c", "i")
При использовании функции-конструктора необходимо использовать нормальные правила замены (escape) символов (вставка перед специальными символами обратного слэша \). Например, следующие записи эквивалентны:
re = new RegExp("\\w+")
re = /\w+/В таблице дан полный список и описание специальных символов, которые могут использоваться в регулярных выражениях.
Литеральная нотация предоставляет компиляцию регулярного выражения при вычислении выражения. Используйте литеральную нотацию, если регулярное выражение останется константным. Например, если Вы используете литеральную нотацию для построения регулярного выражения, используемого в цикле, регулярное выражение не будет перекомпилироваться при каждой итерации.
Конструктор объекта регулярного выражения, например, new RegExp("ab+c"),
предоставляет компиляцию регулярного выражения на этапе прогона. Используйте
функцию-конструктор, если Вы знаете, что патэрн регулярного выражения будет
изменяться, или если патэрн Вам не известен и получается из другого источника,
как при вводе пользователя. После того как Вы определили регулярное выражение, и
если это регулярное выражение используется по всему скрипту и может изменяться,
Вы можете использовать метод compile для
компиляции нового регулярного выражения для обеспечения эффективного многократного использования.
Отдельный предопределённый объект RegExp имеется в каждом окне; то
есть каждый отдельный поток выполнения JavaScript получает свой собственный
объект RegExp. Поскольку каждый скрипт запускается на выполнение
без прерывания потока, это гарантирует, что разные скрипты не перепишут значения объекта RegExp.
Предопределённый объект RegExp имеет static-свойства input, multiline,
lastMatch, lastParen,
leftContext, rightContext
и с $1 по $9. Свойства input и
multiline могут быть предустановлены. Значения других
static-свойств устанавливаются после выполнения методов exec
и test отдельного объекта регулярного
выражения и после выполнения методов match
и replace объекта
String.
Обратите внимание, что некоторые свойства объекта RegExp имеют
длинные и сокращённые (Perl-подобные) имена. Оба имени всегда ссылаются на одно
и то же значение. Perl это язык программирования, из которого JavaScript смоделировал регулярные выражения.
| Свойство |
Описание
|
См.
См.
См.
См.
См.
См.
| Тестировать или нет регулярное выражение относительно всех возможных совпадений в строке, или только относительно первого совпадения.
| Строка, относительно которой выполняется поиск совпадения с регулярным выражением.
|
|
|
|
| |
|---|
| Метод |
Описание
|
|
|
Возвращает литерал объекта, представляющий специфицированный объект; Вы можете
использовать это значение для создания нового объекта. Переопределяет метод
Возвращает строку, представляющую специфицированный объект. Переопределяет
метод
Возвращает примитивное значение специфицированного объекта. Переопределяет
метод |
|---|
Кроме того, этот объект наследует методы watch
и unwatch из объекта Object.
Пример 1. Следующий скрипт использует метод replace для
переключения слов в строке. Для заменяющего текста скрипт использует значения
свойств $1 и $2 глобального объекта RegExp.
Обратите внимание, что имя объекта RegExp не предшествует свойствам $,
когда они передаются как второй аргумент методу replace.
<SCRIPT LANGUAGE="JavaScript1.2">
re = /(\w+)\s(\w+)/;
str = "John Smith";
newstr=str.replace(re, "$2, $1");
document.write(newstr)
</SCRIPT>
Пример 2. Здесь RegExp.input устанавливается событием Change.
В функции getInfo метод exec использует значение RegExp.input
в качестве аргумента. Обратите внимание, что RegExp присоединён к свойствам $.
<HTML>
<SCRIPT LANGUAGE="JavaScript1.2">
function getInfo() {
re = /(\w+)\s(\d+)/;
re.exec();
window.alert(RegExp.$1 + ", your age is " + RegExp.$2);
}
</SCRIPT>
Enter your first name and your age, and then press Enter.
<FORM>
<INPUT TYPE:"TEXT" NAME="NameAge" onChange="getInfo(this);">
</FORM>
</HTML>
Свойства, которые содержат содержат совпадения подстрок в скобках, если имеются.
Поскольку input является static-свойством, оно не является
свойством отдельного объекта регулярного выражения. Поэтому Вы всегда используете его так: RegExp.input.
Количество подстрок в скобках не ограничивается, но предопределённый объект RegExp
может содержать только последние девять. Вы можете иметь доступ ко всем подстрокам в скобках через возвращаемые индексы массива.
Эти свойства могут использоваться в замещающем тексте для метода String.replace.
При таком использовании не вводите перед ними префикс RegExp.
Пример далее иллюстрирует это. Если скобки не включены в регулярное выражение,
скрипт интерпретирует $n литерально (где n это положительное целое число).
Этот скрипт использует метод replace для переключения слов в строке.
Для заменяющего текста скрипт использует значения свойств $1 и $2
глобального объекта RegExp. Обратите внимание, что имя объекта RegExp
не предшествует свойствам $, когда они передаются как второй аргумент методу replace.
<SCRIPT LANGUAGE="JavaScript1.2">
re = /(\w+)\s(\w+)/;
str = "John Smith";
newstr=str.replace(re, "$2, $1");
document.write(newstr)
</SCRIPT>
См. input.
См. multiline.
См. lastMatch.
См. lastParen.
См. leftContext.
См. rightContext.
Компилирует объект регулярного выражения в процессе выполнения скрипта.
regexp.compile(pattern[, flags])
regexp | Имя регулярного выражения. Может быть именем переменной или литералом. |
pattern | |
flags | Если флаги специфицированы, могут иметь одно из следующих значений: |
Метод compile используется для компиляции регулярного выражения,
созданного функцией-конструктором RegExp. Это форсирует компиляцию
регулярного выражения только однократно, что означает, что регулярное выражение
не компилируется всякий раз при его обнаружении. Используйте метод compile,
когда Вам известно, что регулярное выражение будет константным (после получения
его патэрна) и будет многократно использоваться в скрипте.
Вы можете также использовать метод compile для изменения
регулярного выражения в процессе выполнения. Например, если регулярное выражение
изменяется, вы можете использовать метод compile для рекомпиляции
объекта для повышения эффективности последующего неоднократного использования.
Вызов этого метода изменяет значение свойств source, global
и ignoreCase регулярного выражения.
Специфицирует функцию, которая создаёт прототип объекта. Обратите внимание, что значением этого свойства является ссылка на саму функцию, а не строка, содержащая имя функции.
См. Object.constructor.
Выполняет поиск совпадения в специфицированной строке. Возвращает результирующий массив.
regexp.exec([str])
regexp([str])
regexp | Имя регулярного выражения. Это может быть имя переменной или литерал. |
str |
Строка, относительно которой производится поиск совпадений регулярного
выражения. Если отсутствует, используется значение |
Как видно из описания синтаксиса, метод exec регулярного выражения
может быть вызван напрямую (regexp.exec(str)) или неявно (regexp(str)).
Если Вы ищете совпадение просто для того, чтобы
определить true или false,
используйте метод test или метод String search.
Если совпадение найдено, метод exec возвращает массив и обновляет
свойства объекта регулярного выражения и предопределённого объекта регулярного
выражения, RegExp. Если совпадение не найдено, метод exec возвращает null.
<SCRIPT LANGUAGE="JavaScript1.2">
//Совпадает один символ d, с последующим одним или более b, с последующим одним d
//Запоминается совпадение b с последующим d
//Регистр игнорируется
myRe=/d(b+)(d)/ig;
myArray = myRe.exec("cdbBdbsbz");
</SCRIPT>
В таблице показан результат работы скрипта:
Если в регулярно выражении используется флаг "g", Вы можете
многократно использовать метод exec для поиска успешных совпадений
в той же самой строке. При этом поиск стартует с подстроки str,
специфицированной свойством lastIndex регулярного выражения. Например, такой скрипт:
<SCRIPT LANGUAGE="JavaScript1.2">
myRe=/ab*/g;
str = "abbcdefabh"
myArray = myRe.exec(str);
document.writeln("Found " + myArray[0] +
". Next match starts at " + myRe.lastIndex)
mySecondArray = myRe.exec(str);
document.writeln("Found " + mySecondArray[0] +
". Next match starts at " + myRe.lastIndex)
</SCRIPT>
Found abb. Next match starts at 3
Found ab. Next match starts at 9
В этом примере пользователь вводит имя, и скрипт выполняет совпадения относительно ввода. Затем циклически проходит по массиву, чтобы проверить, нет ли других имён, совпадающих с именем пользователя.
В скрипте предполагается, что первые зарегистрированные имена предварительно загружаются в массив A, возможно, с получением их из базы данных party.
<HTML>
<SCRIPT LANGUAGE="JavaScript1.2">
A = ["Frank", "Emily", "Jane", "Harry", "Nick", "Beth", "Rick",
"Terrence", "Carol", "Ann", "Terry", "Frank", "Alice", "Rick",
"Bill", "Tom", "Fiona", "Jane", "William", "Joan", "Beth"]
function lookup() {
firstName = /\w+/i();
if (!firstName)
window.alert (RegExp.input + " isn't a name!");
else {
count = 0;
for (i=0; i<A.length; i++)
if (firstName[0].toLowerCase() == A[i].toLowerCase()) count++;
if (count ==1)
midstring = " other has ";
else
midstring = " others have ";
window.alert ("Thanks, " + count + midstring + "the same name!")
}
}</SCRIPT>
Enter your first name and then press Enter.
<FORM> <INPUT TYPE:"TEXT" NAME="FirstName" onChange="lookup(this);"> </FORM>
</HTML>
Используется ли флаг "g" в регулярном выражении.
global это свойство отдельного объекта регулярного выражения.
Значение global будет true, если флаг "g"
используется; иначе - false. Флаг "g" указывает, что
регулярное выражение должно проверяться относительно всех возможных совпадений в строке.
Вы не можете изменять это свойство явно. Однако вызов метода compile
изменяет значение этого свойства.
Используется ли флаг "i" в регулярном выражении.
ignoreCase это свойство отдельного объекта регулярного выражения.
Значение ignoreCase будет true, если флаг "i"
используется; иначе - false. Флаг "i" указывает, что
регистр символов должен игнорироваться при поиске совпадений в строке.
Вы не можете изменять это свойство явно. Однако вызов метода
compile изменяет значение этого свойства.
Строка, относительно которой выполняется поиск совпадений
с регулярным
выражением. $_ является другим именем этого свойства.
Поскольку input это static-свойство, оно не является свойством
отдельного объекта регулярного выражения. Вы должны всегда использовать его так: RegExp.input.
Если методам exec или test регулярного выражения не
предоставляются аргументы и если RegExp.input имеет значение, это
значение используется как аргумент для этих методов.
Скрипт или браузер могут предварительно устанавливать свойство input.
Если это сделано и если не предоставляется явно строковой аргумент, значение input
используется как строковой аргумент для методов exec или test
объекта регулярного выражения. input устанавливается браузером в следующих случаях:
TEXT, в input
устанавливается значение текстового содержимого.TEXTAREA, в input
устанавливается значение текстового содержимого. Заметьте, что multiline
также устанавливается в true, поэтому поиск совпадений может
производиться по нескольким строкам текста.SELECT, в input
устанавливается значение выбранного текста.Link, в input
устанавливается значение текста метжду тэгами <A HREF=...>
и </A>.
Значение свойства input очищается после завершения работы обработчика события.
Целочисленное свойство чтения/записи, которое специфицирует индекс, с которого стартует следующий поиск совпадения.
lastIndex это свойство отдельного объекта регулярного выражения.
Это свойство устанавливается, только если регулярное выражение использовало флаг "g"
для выполнения глобального поиска. Применяются следующие правила:
lastIndex превышает размер строки, regexp.test
и regexp.exec терпят неудачу, а lastIndex
устанавливается в 0.lastIndex равен длине строки и если регулярное выражение
совпадает с пустой строкой, то регулярное выражение совпадает с вводом,
начиная с lastIndex.lastIndex равен длине строки и если регулярное выражение не
совпадает с пустой строкой, то регулярное выражение не совпадает с вводом, а lastIndex
снова устанавливается в 0.lastIndex устанавливается в следующую позицию после самого последнего совпадения.Например, рассмотрим следующую последовательность операторов:
Последние совпавшие символы. $& это другое имя этого же самого свойства.
Поскольку lastMatch это static-свойство, оно не является свойством
отдельного объекта регулярного выражения. Вы должны всегда использовать его так: RegExp.lastMatch.
Последнее совпадение подстроки в скобках, если имеется. $+ это
другое имя этого же самого свойства.
Поскольку lastParen iэто static-свойство, оно не является свойством
отдельного объекта регулярного выражения. Вы должны всегда использовать его так: RegExp.lastParen.
Подстрока, предшествующая самому последнему совпадению. $` это другое имя этого же самого свойства.
Поскольку leftContext это statiс-свойство, оно не является свойством
отдельного объекта регулярного выражения. Вы должны всегда использовать его так: RegExp.leftContext.
Искать ли на нескольких строках. $* это другое имя этого же самого свойства.
Поскольку multiline это statiс-свойство, оно не является свойством
отдельного объекта регулярного выражения. Вы должны всегда использовать его так: RegExp.multiline.
Значение multiline будет true, если выполняется поиск
на нескольких строках текста, false - если поиск обязан остановиться на символе конца строки.
Скрипт или браузер могут предустанавливать свойство multiline. Если
обработчик события вызывается из элемента TEXTAREA, браузер
устанавливает multiline в true.
multiline очищается после завершения работы обработчика события.
Это означает, что, если Вы предварительно установили multiline в true,
оно восстанавливается в false после выполнения работы любого обработчика события.
Предоставляет прототип для данного класса. Вы можете использовать этот прототип
для добавления свойств или методов во все экземпляры класса. О прототипах см. Function.prototype.
Подстрока, идущая за самым последним совпадением. $' это другое имя этого же самого свойства.
Поскольку rightContext это statiс-свойство, оно не является
свойством отдельного объекта регулярного выражения. Вы должны всегда
использовать его так: RegExp.rightContext.
Свойство "только для чтения", содержащее текст патэрна, исключая слэши (/) и
флаги "g" и "i".
source это свойство отдельного объекта регулярного выражения.
Вы не можете изменять это свойство явно. Однако вызов метода
compile изменяет значение этого свойства.
Выполняет поиск совпадения регулярного выражения и специфицированной строки.
Возвращает true или false.
regexp.test([str])
regexp | Имя регулярного выражения. Это может быть имя переменной или литерал. |
str |
Строка, относительно которой производится подстановка регулярного выражения.
Если отсутствует, используется значение |
Если Вам нужно знать, найдено ли совпадение патэрна в строке, используйте метод test (аналогично
методу String.search); для
получения большей информации (но при более медленном выполнении) используйте
метод exec (аналогично методу String.match).
Печатается сообщение, содержание которого зависит от успешности прохождения теста:
function testinput(re, str){
if (re.test(str))
midstring = " contains ";
else
midstring = " does not contain ";
document.write (str + midstring + re.source);
}
Возвращает строку, представляющую исходный код объекта.
toSource()
Метод toSource возвращает следующие значения:
RegExp метод toSource
возвращает следующую строку, означающую, что исходный код недоступен:function Boolean() {
[native code]
}
RegExp метод toSource возвращает строку, представляющую исходный код объекта.Этот метод обычно вызывается в JavaScript внутренне, а не явно в коде.
Object.toSourceВозвращает строку, представляющую специфицированный объект.
toString()
Объект RegExp переопределяет метод toString
объекта Object; он не наследует Object.toString.
Для объектов RegExp метод toString
возвращает строковое представление объекта.
Выводится строка, отображающая строковое значение объекта RegExp:
myExp = new RegExp("a+b+c");
alert(myExp.toString()) // выведет "/a+b+c/"
Object.toStringВозвращает примитивное значение RegExp-объекта.
valueOf()
Метод valueOf объекта RegExp
возвращает примитивное значение RegExp-объекта как тип данных string. Это
значение эквивалентно RegExp.toString.
Этот метод обычно вызывается в JavaScript внутренне, а не явно в коде.
myExp = new RegExp("a+b+c");
alert(myExp.valueOf()) выведет "/a+b+c/"
RegExp.toString, Object.valueOfДата последнего обновления: 28 мая 1999 года.
Copyright (c) 1999