Объект - регулярное выражение, содержащий патэрн регулярного выражения. Он имеет свойства и методы для использования этого регулярного выражения при поиске и замене совпадений в строках.
Помимо свойств отдельного объекта регулярного выражения, который Вы создаёте
через использование функции-конструктора 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