Назад Вперёд |
Ядро JavaScript 1.5. Справочник. |
Объект регулярного выражения, содержит патэрн регулярного выражения. Имеет свойства и методы для использования этого регулярного выражения для поиска и замены совпадений в строках.
В дополнение к свойствам отдельного объекта регулярного выражения, который Вы
создаёте и использованием функции конструктора RegExp, предопределённый объект RegExp
имеет static-свойства, которые устанавливаются всегда, когда используется какое-либо регулярное выражение.
JavaScript 1.3: добавлен метод
JavaScript 1.5, NES 6.0: добавлен флаг | |
Формат литерального текста или функция конструктора RegExp.
Литеральный формат используется так:
Функция конструктора используется так:
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"),
предоставляет компиляцию регулярного выражения на этапе прогона/runtime.
Используйте функцию, если знаете, что патэрн регулярного выражения будет
изменяться, или если Вы не знаете патэрн и получаете его из другого источника, такого как ввод от пользователя.
Отдельный предопределённый объект RegExp
доступен для каждого окна; то есть каждый отдельный поток выполнения JavaScript
получает свой собственный объект RegExp.
Поскольку каждый скрипт запускается в потоке без остановки до конца выполнения,
это гарантирует, что разные скрипты не перепишут значения объекта RegExp.
Обратите
внимание, что некоторые свойства объекта RegExp
имеют и длинные, и короткие (Perl-подобные) имена. Оба имени всегда ссылаются на
одно и то же значение. Perl это язык программирования, из которого JavaScript
смоделировал свои регулярные выражения.
Свойство | Описание |
|---|---|
constructor | |
global |
Нужно ли тестировать регулярное выражение относительно всех
возможных совпадений в строке, или только относительно первого. В JavaScript 1.5
это свойство экземпляра объекта |
ignoreCase | Игнорировать ли регистр символов при выполнении совпадений в строке. В JavaScript 1.5 это свойство экземпляра объекта RegExp, а не объект RegExp. |
lastIndex | Индекс, с которого начинать поиск совпадения в строке.
В JavaScript 1.5 это свойство экземпляра объекта RegExp, а не объект |
multiline |
Искать ли в строках, расположенных по нескольким строкам.
В JavaScript 1.5 это свойство экземпляра объекта |
prototype | |
Текст патэрна. В JavaScript 1.5 это свойство экземпляра объекта |
Метод |
Описание |
|---|---|
exec |
|
test | |
toSource |
Возвращает литерал объекта, представляющий специфицированный объект;
можно использовать это значение для создания нового объекта. Переопределяет
метод |
toString |
Возвращает строку, представляющую специфицированный объект.
Переопределяет метод |
Кроме того, этот объект наследует методы watch
и unwatch из Object.
Этот скрипт использует метод replace
для переключения слов в строке. В замещающем тексте скрипт использует "$1" и "$2"
для обозначения результатов совпадений с соответствующими скобками в патэрне регулярного выражения.
<SCRIPT>
re = /(\w+)\s(\w+)/;
str = "John Smith";
newstr=str.replace(re, "$2, $1");
document.write(newstr)
</SCRIPT>
На экране появится "Smith, John".
В этом примере RegExp.input устанавливается событием Change. В функции getInfo
метод exec использует значение RegExp.input в качестве аргумента.
<SCRIPT>
function getInfo() {
re = /(\w+)\s(\d+)/;
var m = re.exec();
window.alert(m[] + ", your age is " + m[2]);
}
</SCRIPT>
Enter your first name and your age, and then press Enter.
<FORM>
<INPUT TYPE:"TEXT" NAME="NameAge" onChange="getInfo(this);">
</FORM>
Специфицирует функцию, которая создаёт прототип объекта. Обратите внимание, что значением этого свойств является ссылка на саму функцию, а не строка с именем функции.
См. Object.constructor.
Выполняет поиск совпадений в специфицированной строке. Возвращает результирующий массив.
regexp.exec([str])
regexp([str])
regexp |
Имя регулярного выражения. Может быть именем переменной или литералом. |
str | Строка, которая проверяется на совпадение с регулярным выражением. |
Как видно из описания синтаксиса, метод exec
регулярного выражения может вызываться явно (regexp.exec(str)), или неявно (regexp(str)).
Если поиск выполняется, чтобы просто найти true или false, используйте
метод test или метод String search.
Если совпадение найдено, метод exec возвращает массив и обновляет свойства объекта регулярного выражения.
Если совпадение не найдено, метод 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, возможно, чрез получение их из базы данных.
<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!")
}
}
Enter your first name and then press Enter.
<FORM> <INPUT TYPE:"TEXT" NAME="FirstName" onChange="lookup(this);"> </
FORM>
Используется ли флаг "g" с регулярным выражением.
Экземпляры
| |
global это свойство отдельного объекта регулярного выражения.
Значение global будет true, если флаг "g" был
использован; иначе, false. Флаг "g" указывает, что должно быть протестировано относительно всех возможных совпадений в строке.
Вы не можете изменить это свойство явно.
Используется ли флаг "i" с регулярным выражением.
Экземпляры RegExp. |
|
ignoreCase это свойство
отдельного объекта регулярного выражения.
Значение ignoreCase будет true, если флаг "i" был использован;
иначе, false. Флаг "i" указывает, что регистр должен игнорироваться при попытках совпадений в строке.
Вы не можете изменить это свойство явно.
Целочисленное read/write свойство, которое специфицирует индекс, с которого начинается поиск следующего совпадения.
Экземпляры
| |
lastIndex это свойство отдельного объекта регулярного выражения.
Это свойство устанавливается, только если регулярное выражение использует флаг "g" для указания на глобальный поиск. Применяются следующие правила:
lastIndex больше, чем размер строки, regexp.test и regexp.exec терпят
неудачу, а lastIndex устанавливается в 0.lastIndex равен размеру строки и если регулярное выражение совпадает с пустой строкой, то
регулярное выражение совпадает с вводом, начиная с lastIndex.lastIndex равен размеру строки и если регулярное выражение не совпадает с пустой строкой,
то регулярное выражение не совпадает с вводом, и lastIndex устанавливается 0.lastIndex устанавливается в следующую позицию после самого последнего совпадение.Например, рассмотрим последовательность следующих операторов:
Указывает, искать ли в строках по нескольким строкам текста.
Экземпляры | |
multiline это свойство отдельного объекта регулярного выражения.
Значение multiline равно true, если был
использован флаг "m"; иначе, false. Флаг "m" указывает, что многострочная строка ввода должна рассматриваться как несколько
строк. Например, если используется "m", "^" и "$" изменяются с
начала и конца целой строки на начало и конец любой строки внутри строки (ввода).
Вы не можете изменить это свойство явно.
Представляет прототип для данного класса. Вы можете использовать прототип для
добавления свойств всем экземплярам класса. О прототипах см. Function.prototype.
Свойство только-для-чтения, содержащее текст патэрна, исключая символы /.
Экземпляры |
|
source это свойство
отдельного объекта регулярного выражения.
Вы не можете изменить это свойство явно.
Выполняет поиск совпадения регулярного выражения и специфицированной строки. Возвращает 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
возвращает следующую строку, указывающую, что исходный код недоступен:RegExp, toSource возвращает строку исходного кода объекта.Этот метод обычно вызывается внутренне в JavaScript, а не явно в коде.
Возвращает строку, представляющую специфицированный объект.
toString()Отсутствуют.
Объект RegExp переопределяет метод toString
объекта Object; он не наследует
Object.toString.
Для объектов RegExp метод toString возвращает строку, представляющую специфицированный объект.
Отображается строковое значение RegExp-объекта:
myExp = new RegExp("a+b+c");
alert(myExp.toString()) displays "/a+b+c/"
Copyright © 2000 Netscape Communications Corp. Все права зарезервированы.
Дата последнего обновления: 28 сентября 2000 г.