|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
JavaScript 1.3: добавлен метод toSource. | |
Формат текста литерала функции-конструктора RegExp.
Формат литерала используется так:
/pattern/flags
Функция-конструктор используется так:
new RegExp("pattern"[, "flags"])
pattern | |
flags |
Заметьте, что параметры формата литерала не используют знаки кавычек для обозначения строк, а параметры функции-конструктора - используют. Так, следующие выражения создают одно регулярное выражение:
/ab+c/i
new RegExp("ab+c", "i")
При использовании функции-конструктора необходимо использовать нормальные правила замены (escape) символов (вставка перед специальными символами обратного слэша \). Например, следующие записи эквивалентны:
re = new RegExp("\\w+")
re = /\w+/
В таблице дан полный список и описание специальных символов, которые могут использоваться в регулярных выражениях.
Таблица 1.3 Специальные символы в регулярных выражениях| Символ | Значение |
|---|---|
\ | Для символов, которые обычно рассматриваются литерально, указывает, что следующий символ является специальным и не должен интерпретироваться литерально. Например, /b/ совпадает с символом 'b'. Поместив backslash перед b, /\b/, делаем символ специальным, в данном случае - обозначающим границу слова. Для символов, которые обычно рассматриваются как специальные, указывает, что следующий символ не является специальным и должен интерпретироваться литерально. Например, * это спецсимвол, означающий 0 или более совпадений предыдущего символа; например, /a*/ означает 0 или более совпадений символа а. Для подстановки * литерально, предварите его обратным слэшем; например, /a\*/ совпадает с 'a*'. |
^ | Совпадение в начале ввода или строки. Например, /^A/ не совпадает с 'A' в строке "an A," но совпадает в "An A." |
$ | Совпадение в конце ввода или строки. Например, /t$/ не совпадает с 't' в "eater", но совпадает в "eat" |
* | Совпадение предшествующего символа 0 или более раз. Например, /bo*/ совпадает с 'boooo' в "A ghost booooed" и с 'b' в "A bird warbled", но совпадений нет в "A goat grunted". |
+ | Совпадение предшествующего символа 1 или более раз. Эквивалентно {1,}. Например, /a+/ совпадает с 'a' в "candy" и со всеми a в "caaaaaaandy." |
? | Совпадение предшествующего символа 1 или более раз. Например, /e?le?/ совпадает с 'el' in "angel" and the 'le' in "angle." |
. | (Десятичная точка) совпадает с любым символом, за исключением символа новой строки. Например, /.n/ совпадает с 'an' и с 'on' в "nay, an apple is on the tree", но не с 'nay'. |
(x) | Совпадает с 'x' и запоминает совпадение. Например, /(foo)/ совпадает (и запоминается) с 'foo' в "foo bar." Совпавшая подстрока может быть вызвана из элементов результирующего массива [1], ..., [n] или из свойств $1, ..., $9 предопределённого объекта RegExp. |
x|y | Например, /green|red/ совпадает с 'green' в "green apple" и с 'red' в "red apple". |
{n} | Где n это положительное целое число. Совпадение предшествующего символа точно n раз. Например, /a{2}/ не совпадает с 'a' в "candy," но совпадает с со всеми а в "caandy" и с первыми двумя а в "caaandy." |
{n,} | Где n это положительное целое число. Совпадение как минимум n появлений предшествующего символа. Например, /a{2,} не совпадает с 'a' в "candy", но совпадает со всеми а в "caandy" и в "caaaaaaandy". |
{n,m} | Где n и m это положительные целые числа. Совпадают минимум n и максимум m вхождений предшествующего символа. Например, /a{1,3}/ не совпадает ни с чем в "cndy", совпадает с 'a' в "candy", двумя а в "caandy" и первыми тремя a в "caaaaaaandy". Заметьте, что, при совпадении с "caaaaaaandy", совпадает "aaa", хотя строка-оригинал содержит больше а. |
[xyz] | Набор символов. Совпадает с одним (любым) из символов набора. Можно специфицировать диапазон символов с помощью дефиса. Например, [abcd] равносильно [a-c]. Они совпадают с 'b' в "brisket" и с 'c' в "ache". |
[^xyz] | Отрицающий набор символов. То есть он совпадает со всем, кроме того, что содержится в скобках. Можно специфицировать диапазон символов с помощью дефиса. Например, [^abc] равносильно [^a-c]. Совпадает с 'r' в "brisket" и с 'h' в "chop." |
[\b] | |
\b | Соответствует границе слова, такой как space/пробел. (Не путайте с [\b].) Например, /\bn\w/ совпадает с 'no' в "noonday";/\wy\b/ совпадает с 'ly' в "possibly yesterday." |
\B | Совпадает с не-границей слова. Например, /\w\Bn/ совпадает с 'on' в "noonday", и /y\B\w/ совпадает с 'ye' в "possibly yesterday." |
\cX | Где X это управляющий символ. Совпадает с управляющим символом в строке. |
\d | Совпадает с цифровым символом. Эквивалентно [0-9]. Например, /\d/ или /[0-9]/ совпадает с '2' в "B2 is the suite number." |
\D | Совпадает с любым нецифровым символом. Эквивалентно [^0-9]. Например, /\D/ или /[^0-9]/ совпадает с matches 'B' в "B2 is the suite number." |
\f | |
\n | |
\r | |
\s | Совпадает с одиночным пробельным символом, включая space, tab, form feed, line feed. Эквивалентно [ \f\n\r\t\v]. |
\S | Совпадает с одиночным символом, отличным от пробельного символа. Эквивалентно [^ \f\n\r\t\v]. |
\t | |
\v | |
\w | Совпадает с любым алфавитным или цифровым символом, включая символ подчёркивания. Эквивалентно [A-Za-z0-9_]. Например, /\w/ совпадает с 'a' в "apple", с '5' в "$5.28" и с '3' в "3D." |
\W | Совпадает с любым несловарным символом. Эквивалентно [^A-Za-z0-9_]. Например, /\W/ или /[^$A-Za-z0-9_]/ совпадает с '%' в "50%." |
\n | Где n это положительное целое. Обратная ссылка на последнюю подстроку, совпавшую с n символов в скобках в регулярном выражении (с учётом левой скобки). Например, /apple(,)\sorange\1/ совпадает с 'apple, orange,' в "apple, orange, cherry, peach." Более полные примеры даны после этой таблицы. Примечание: Если количество левых скобок меньше числа, специфицированного в \n, \n считается 8-ричной escape-заменой, как описано в следующем ряду данной таблицы. |
\ooctal | Где \ooctal это 8-ричное escape-значение или где \xhex это 16-ричное escape-значение. Позволяет внедрять ASCII-коды в регулярные выражения. |
Литеральная нотация предоставляет компиляцию регулярного выражения при вычислении выражения. Используйте литеральную нотацию, если регулярное выражение останется константным. Например, если Вы используете литеральную нотацию для построения регулярного выражения, используемого в цикле, регулярное выражение не будет перекомпилироваться при каждой итерации.
Конструктор объекта регулярного выражения, например, 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 смоделировал регулярные выражения.
| Свойство |
Описание$1, ..., $9
| $_ См. input. $* См. multiline. $& См. lastMatch. $+ См. lastParen. $` См. leftContext. $' См. rightContext. constructor
| global Тестировать или нет регулярное выражение относительно всех возможных совпадений в строке, или только относительно первого совпадения. ignoreCase
| input Строка, относительно которой выполняется поиск совпадения с регулярным выражением. lastIndex
| lastMatch
| lastParen
| leftContext
| multiline
| prototype |
|---|
| Метод |
Описаниеcompile
| exec
| test
| toSource Возвращает литерал объекта, представляющий специфицированный объект; Вы можете использовать это значение для создания нового объекта. Переопределяет метод Object.toSource. toString Возвращает строку, представляющую специфицированный объект. Переопределяет метод Object.toString. valueOf Возвращает примитивное значение специфицированного объекта. Переопределяет метод Object.valueOf. |
|---|
Кроме того, этот объект наследует методы 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 | Строка, относительно которой производится поиск совпадений регулярного выражения. Если отсутствует, используется значение RegExp.input. |
Как видно из описания синтаксиса, метод 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>
В таблице показан результат работы скрипта:
| Объект | Свойство/Индекс | Описание |
ПримерmyArray
| index input
| [0]
| [1], ...[n] Совпадения подстрок в скобках, если имеются. Количество подстрок в скобках не ограничивается.
| myRe lastIndex ignoreCase Указывает, используется ли флаг "i" для игнорирования регистра символов global Указывает, используется ли флаг "g" для глобального поиска совпадения source
| RegExp lastMatch
| leftContext
| rightContext
| $1, ...$9 Совпадения подстрок в скобках, если имеются. Количество возможных подстрок в скобках не ограничивается, но RegExp может содержать только последние девять.
| lastParen |
|---|
Если в регулярно выражении используется флаг "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 устанавливается браузером в следующих случаях:
Значение свойства input очищается после завершения работы обработчика события.
Целочисленное свойство чтения/записи, которое специфицирует индекс, с которого стартует следующий поиск совпадения.
lastIndex это свойство отдельного объекта регулярного выражения.
Это свойство устанавливается, только если регулярное выражение использовало флаг "g" для выполнения глобального поиска. Применяются следующие правила:
Например, рассмотрим следующую последовательность операторов:
re = /(hi)?/g | |
re("hi") | |
re("hi") | Возвращает [""], пустой массив, чей нулевой элемент является совпавшей строкой. В данном случае это пустая строка, поскольку lastIndex был 2 (и всё ещё остаётся 2), а "hi" имеет размер 2. |
Последние совпавшие символы. $& это другое имя этого же самого свойства.
Поскольку 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 | Строка, относительно которой производится подстановка регулярного выражения. Если отсутствует, используется значение RegExp.input. |
Если Вам нужно знать, найдено ли совпадение патэрна в строке, используйте метод 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 возвращает следующие значения:
function Boolean() {
[native code]
}
Этот метод обычно вызывается в JavaScript внутренне, а не явно в коде.
Возвращает строку, представляющую специфицированный объект.
toString()
Объект RegExp переопределяет метод toString объекта Object; он не наследует Object.toString. Для объектов RegExp метод toString возвращает строковое представление объекта.
Выводится строка, отображающая строковое значение объекта RegExp:
myExp = new RegExp("a+b+c");
alert(myExp.toString()) // выведет "/a+b+c/"
Возвращает примитивное значение RegExp-объекта.
valueOf()
Метод valueOf объекта RegExp возвращает примитивное значение RegExp-объекта как тип данных string. Это значение эквивалентно RegExp.toString.
Этот метод обычно вызывается в JavaScript внутренне, а не явно в коде.
myExp = new RegExp("a+b+c");
alert(myExp.valueOf()) выведет "/a+b+c/"
Дата последнего обновления: 28 мая 1999 года.
Copyright (c) 1999 Netscape Communications Corporation
|