Назад    Вперёд

Ядро JavaScript 1.5. Справочник.


 

RegExp

 

Объект регулярного выражения, содержит патэрн регулярного выражения. Имеет свойства и методы для использования этого регулярного выражения для поиска и замены совпадений в строках.

 

В дополнение к свойствам отдельного объекта регулярного выражения, который Вы создаёте и использованием функции конструктора RegExp, предопределённый объект RegExp имеет static-свойства, которые устанавливаются всегда, когда используется какое-либо регулярное выражение.

 

Объект ядра

Реализован в

JavaScript 1.2, NES 3.0

JavaScript 1.3: добавлен метод toSource.

JavaScript 1.5, NES 6.0: добавлен флаг m, нежадный модификатор, незахватывающие скобки, "смотрящие вперёд"/lookahead-утверждения. ECMA 262, Edition 3.


Создание

 

Формат литерального текста или функция конструктора RegExp.

 

Литеральный формат используется так:

 

/pattern/flags

 

Функция конструктора используется так:

 

new RegExp("pattern"[, "flags"])


Параметры

pattern

Текст регулярного выражения.

flags

Флаг, если специфицирован, может иметь следующие значения в любом сочетании:

  • g: глобальная подстановка

  • i: игнорировать регистр

  • m: подставлять на нескольких строках

 

Заметьте, что параметры литерального формата не используют кавычек для обозначения строк, а параметры функции конструктора - используют кавычки. Итак, следующие выражения создают одно и то же регулярное выражение:

 

/ab+c/i
new RegExp("ab+c", "i")


Описание

При использовании функции конструктора необходимо применять нормальные правила замен-подстановок (escape) в строках (ввод специального символа с предшествующей \ при включении этого символа в строку). Например, следующие два выражения эквивалентны:

 

re = new RegExp("\\w+")
re = /\w+/

 

В таблице представлен полный список и описание специальных символов, которые могут использоваться в регулярных выражениях.


 

Таблица 1.1    Специальные символы в регулярных выражениях

TD>*

Символ

Значение

\

Для символов, которые обычно рассматриваются литерально, указывает, что следующий символ является специальным символом и не интерпретируется литерально.

Например, /b/ совпадает с символом 'b'. Поместив обратную наклонную черту-backslash перед b, то есть /\b/, придаём символу специальное значение - "граница слова".

-или-

Для символов, которые обычно рассматриваются как специальные, указывает, что следующий символ является не специальным символом и должен интерпретироваться литерально.

Например, * это специальный символ, который означает 0 или более вхождений предшествующего символа; например, /a*/ означает совпадение с 0 или более a. Чтобы искать * литерально, поставьте перед ним backslash; например, /a\*/ совпадает с 'a*'.

^

Совпадение с начала ввода. Если многострочный флаг установлен в true, совпадает также сразу после символа обрыва строки.

Например, /^A/ не совпадает с 'A' в строке "an A", но совпадает с первой 'A' в строке  "An A."

$

Совпадение в конце ввода. Если многострочный флаг установлен в true, совпадает также непосредственно перед символом обрыва строки.

Например, /t$/ не совпадает с  't' в "eater", но совпадает с ним в "eat".

Совпадение с предыдущим символом 0 или более раз.

Например, /bo*/ совпадает с 'boooo' в "A ghost booooed" и с 'b' в "A bird warbled", но ничего не совпадает в "A goat grunted".

+

Совпадение с предыдущим символом 1 или более раз. Эквивалентно {1,}.

Например, /a+/ совпадает с 'a' в "candy" и со всеми 'a' в "caaaaaaandy".

?

Совпадение с предыдущим символом 0 или 1 раз.

Например, /e?le?/ совпадает с 'el' в "angel" и с 'le' в "angle."

если используется сразу после одного из квантификаторов *, +, ? или {}, делает квантификатор нежадным (совпадает минимальное число раз), что противоположно действию по умолчанию, когда квантификатор жадничает (совпадает максимальное число раз).

Также используется во вперёдсмотрящих утверждениях, которые описаны в (?=), (?!), и (?:) в этой таблице.

.

(Десятичная точка) совпадает с любым одиночным символом, исключая символ новой строки.

Например, /.n/ совпадает с 'an' и 'on' в "nay, an apple is on the tree", но не с 'nay'.

(x)

Совпадает с 'x' и запоминает совпадение. Это называется "захватывающие скобки".

Например, /(foo)/ совпадает с и запоминает 'foo' в "foo bar." Совпавшая подстрока может быть вызвана из элементов результирующего массива [1], ..., [n] или из предопределённых свойств $1, ..., $9 RegExp-объектов.

(?:x)

Совпадает с 'x', но не запоминает совпадение. Это называется "незахватывающие скобки". Совпавшая подстрока не может быть вызвана из элементов результирующего массива [1], ..., [n] или из предопределённых свойств $1, ..., $9 RegExp-объектов.

x(?=y)

Совпадает с 'x', только если после 'x' следует 'y'. Например, /Jack(?=Sprat)/ совпадает с 'Jack', только если следом идёт 'Sprat'. /Jack(?=Sprat|Frost)/ совпадает с 'Jack', только если следом идёт 'Sprat' или 'Frost'. Однако ни 'Sprat', ни 'Frost' не являются частью результатов совпадения.

x(?!y)

Совпадает с 'x', только если после 'x' не следует 'y'. Например, /\d+(?!\.)/ совпадает с числом, только если следом не идёт десятичная точка.
/\d+(?!\.)/.exec("3.141") совпадает с 141, но не совпадает с 3.141.

x|y

Совпадает с 'x' или с  'y'.

Например, /green|red/ совпадает с 'green' в "green apple" и с 'red' в "red apple."

{n}

Где n это положительное целое. Совпадает точно с n появлений предшествующего элемента.

Например, /a{2}/ не совпадает с  'a' в "candy," но совпадает со всеми 'a' в "caandy" и с первыми двумя 'a' в "caaandy."

{n,}

Где n это положительное целое. Совпадает с не менее, чем n появлений предшествующего элемента.

Например, /a{2,}не совпадает с  'a' в "candy," но совпадает со всеми 'a' в "caandy" и в "caaaaaaandy."

{n,m}

Где n и m это положительные целые. Совпадает с минимум n и с максимум m появлений предшествующего элемента.

Например, /a{1,3}/ не совпадает ни с чем в "cndy", совпадает с 'a' в "candy," с первыми двумя 'a' в "caandy" и с первыми тремя 'a' в "caaaaaaandy". Обратите внимание, что при совпадении с "caaaaaaandy", совпадает "aaa", хотя оригинальная строка содержит больше 'a'.

[xyz]

Набор символов. Совпадение с одним из символов в скобках. Можно специфицировать диапазон символов с помощью дефиса.

Например, [abcd] это то же самое, что [a-c]. Совпадает с 'b' в "brisket" и с 'c' в "ache".

[^xyz]

Отрицающий набор символов. То есть совпадение с тем, что не заключено в скобки. Можно специфицировать диапазон символов с помощью дефиса.

Например, [^abc] это то же самое, что [^a-c]. С начала совпадает с  'r' в "brisket" и с 'h' в "chop."

[\b]

Совпадает с backspace. (Не с \b.)

\b

Совпадает с концом слова, таким как пробел. (Не с [\b].)

Например, /\bn\w/ совпадает с 'no' в "noonday";/\wy\b/ совпадает с 'ly' в "possibly yesterday."

\B

Совпадение не в конце слова.

Например, /\w\Bn/ совпадает с 'on' в "noonday", и /y\B\w/ совпадает с 'ye' в "possibly yesterday."

\cX

Где X это буква из диапазона A - Z. Совпадение с управляющим символом в строке.

Например, /\cM/ совпадает с control-M в строке.

\d

Совпадает с цифрой. Эквивалентно [0-9].

Например, /\d/ или /[0-9]/ совпадает с '2' в "B2 is the suite number."

\D

Совпадает с не-цифрой. Эквивалентно[^0-9].

Например, /\D/ или /[^0-9]/ совпадает с 'B' в "B2 is the suite number."

\f

Совпадает с form-feed/прогоном страницы.

\n

Совпадает с linefeed/прогоном строки.

\r

Совпадает с "возвратом каретки".

\s

Совпадает с одиночным пробельным символом, включая space, tab, form feed, line feed. Эквивалентно [ \f\n\r\t\u00A0\u2028\u2029].

Например, /\s\w*/ совпадает с ' bar' в "foo bar."

\S

Совпадает с одиночным символом, отличным от пробелов. Эквивалентно
[^ \f\n\r\t\u00A0\u2028\u2029].

Например, /\S/\w* совпадает с 'foo' в "foo bar."

\t

Совпадает с tab.

\v

Совпадает с vertical tab.

\w

Совпадает с любым алфавитным или цифровым символом, включая underscore/символ подчёркивания. Эквивалентно [A-Za-z0-9_].

Например, /\w/ matches 'a' in "apple," '5' in "$5.28," and '3' in "3D."

\W

Совпадает с любым не-словом. Эквивалентно [^A-Za-z0-9_].

Например, /\W/ or /[^$A-Za-z0-9_]/ совпадает с '%' в "50%."

\n

Где n это положительное целое. обратная ссылка на последнее совпадение подстроки, где n заключённых в скобки в регулярном выражении (включая левую скобку).

Например, /apple(,)\sorange\1/ совпадает с 'apple, orange' в "apple, orange, cherry, peach." Более сложные примеры даны после этой таблицы.

\0

Совпадает с символом NUL. После него не ставьте другую цифру.

\xhh

Совпадает с символом с кодом hh (два 16-ричных числа).

\uhhhh

Совпадает с символом с кодом hhhh (четыре 16-ричных числа).

 

Литеральная нотация предоставляет компиляцию регулярного выражения при вычислении выражения. Используйте литеральную нотацию, если регулярное выражение должно остаться константой. Например, если Вы используете литеральную нотацию для построения регулярного выражения, используемого в цикле, регулярное выражение не должно перекомпилироваться при каждой итерации.

 

Конструктор объекта регулярного выражения, например, new RegExp("ab+c"), предоставляет компиляцию регулярного выражения на этапе прогона/runtime. Используйте функцию, если знаете, что патэрн регулярного выражения будет изменяться, или если Вы не знаете патэрн и получаете его из другого источника, такого как ввод от пользователя.

 

Отдельный предопределённый объект RegExp доступен для каждого окна; то есть каждый отдельный поток выполнения JavaScript получает свой собственный объект RegExp. Поскольку каждый скрипт запускается в потоке без остановки до конца выполнения, это гарантирует, что разные скрипты не перепишут значения объекта RegExp.


Свойства. Резюме.
 

Обратите внимание, что некоторые свойства объекта RegExp имеют и длинные, и короткие (Perl-подобные) имена. Оба имени всегда ссылаются на одно и то же значение. Perl это язык программирования, из которого JavaScript смоделировал свои регулярные выражения.

 

Свойство

Описание

constructor

Специфицирует функцию, создающую прототип объекта.

global

Нужно ли тестировать регулярное выражение относительно всех возможных совпадений в строке, или только относительно первого. В JavaScript 1.5 это свойство экземпляра объекта RegExp, а не объект RegExp.

ignoreCase

Игнорировать ли регистр символов при выполнении совпадений в строке. В JavaScript 1.5 это свойство экземпляра объекта RegExp, а не объект RegExp.

lastIndex

Индекс, с которого начинать поиск совпадения в строке. В JavaScript 1.5 это свойство экземпляра объекта RegExp, а не объект RegExp.

multiline

Искать ли в строках, расположенных по нескольким строкам. В JavaScript 1.5 это свойство экземпляра объекта RegExp, а не объект RegExp.

prototype

Позволяет добавлять свойства всем объектам.

source

Текст патэрна. В JavaScript 1.5 это свойство экземпляра объекта RegExp, а не объект RegExp.


 

Метод. Резюме.


Метод

Описание

exec

Выполняет поиск совпадений в своём параметре-строке.

test

Тестирует на совпадение в своём параметре-строке.

toSource

Возвращает литерал объекта, представляющий специфицированный объект; можно использовать это значение для создания нового объекта. Переопределяет метод Object.toSource.

toString

Возвращает строку, представляющую специфицированный объект. Переопределяет метод Object.toString.

 

Кроме того, этот объект наследует методы watch и unwatch из Object.


Примеры

Пример 1.

Этот скрипт использует метод replace для переключения слов в строке. В замещающем тексте скрипт использует "$1" и "$2" для обозначения результатов совпадений с соответствующими скобками в патэрне регулярного выражения.

 

<SCRIPT>
re = /(\w+)\s(\w+)/;
str = "John Smith";
newstr=str.replace(re, "$2, $1");
document.write(newstr)
</SCRIPT>

 

На экране появится "Smith, John".

 

Пример 2.

В этом примере RegExp.input устанавливается событием Change. В функции getInfo метод exec использует значение RegExp.input в качестве аргумента.

 

<HTML>

<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>

</HTML>


constructor


 

Специфицирует функцию, которая создаёт прототип объекта. Обратите внимание, что значением этого свойств является ссылка на саму функцию, а не строка с именем функции.

Свойство из

RegExp

Реализовано в

JavaScript 1.1, NES 2.0

Версия ECMA

ECMA-262


Описание

См. Object.constructor.

 


exec


 

Выполняет поиск совпадений в специфицированной строке. Возвращает результирующий массив.

Метод из

RegExp

Реализован в

JavaScript 1.2, NES 3.0

Версия ECMA

ECMA 262, Edition 3 (только первый синтаксис)


Синтаксис
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>

 

В таблице показаны результаты работы этого скрипта:

 

Объект

Свойство/Индекс

Описание

Пример

myArray

 

Контекст myArray.

["dbBd", "bB", "d"]

index

Индекс совпадений в строке с базой 0.

1

input

Строка-оригинал.

cdbBdbsbz

[0]

Последние совпавшие символы.

dbBd

[1], ...[n]

Совпавшие подстроки в кавычках, если имеются (подстроки). Количество подстрок в кавычках не ограничено.

[1] = bB
[2] = d

myRelastIndex

Индекс, с которого начать следующий поиск.

5

ignoreCase

Указывает, использовался ли флаг "i" для игнорирования регистра.

true

global

Указывает, использовался ли флаг "g" для глобального поиска совпадений.

true

multiline

Указывает, использовался ли флаг "m" для глобального поиска совпадений.

false

source

Текст патэрна.

d(b+)(d)

 

Если Ваше регулярное выражение использует флаг "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, возможно, чрез получение их из базы данных.

 

<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>

 


global


 

Используется ли флаг "g" с регулярным выражением.

Свойство из

Экземпляры RegExp.

Read-only

Реализовано в

JavaScript 1.2, NES 3.0

Версия ECMA

ECMA 262, Edition 3


Описание

global это свойство отдельного объекта регулярного выражения.

 

Значение global будет true, если флаг "g" был использован; иначе, false. Флаг "g" указывает, что должно быть протестировано относительно всех возможных совпадений в строке.

 

Вы не можете изменить это свойство явно.

 


ignoreCase


 

Используется ли флаг "i" с регулярным выражением.

Свойство из

Экземпляры RegExp.

Read-only

Реализовано в

JavaScript 1.2, NES 3.0

Версия ECMA

ECMA 262, Edition 3


Описание

ignoreCase это свойство отдельного объекта регулярного выражения.

 

Значение ignoreCase будет true, если флаг "i" был использован; иначе, false. Флаг "i" указывает, что регистр должен игнорироваться при попытках совпадений в строке.

 

Вы не можете изменить это свойство явно.

 


lastIndex


 

Целочисленное read/write свойство, которое специфицирует индекс, с которого начинается поиск следующего совпадения.

Свойство из

Экземпляры RegExp.

Реализовано в

JavaScript 1.2, NES 3.0

Версия ECMA

ECMA 262, Edition 3


Описание

lastIndex это свойство отдельного объекта регулярного выражения.

 

Это свойство устанавливается, только если регулярное выражение использует флаг "g" для указания на глобальный поиск. Применяются следующие правила:

Например, рассмотрим последовательность следующих операторов:

 

re = /(hi)?/g

Совпадает с пустой строкой.

re("hi")

Возвращает ["hi", "hi"] с lastIndex, который равен 2.

re("hi")

Возвращает [""], пустой массив, чей нулевой элемент является совпавшей строкой. В данном случае это пустая строка, поскольку lastIndex был 2 (и всё ещё равен 2), а "hi" имеет размер 2.


 

multiline


 

Указывает, искать ли в строках по нескольким строкам текста.

Свойство из

Экземпляры RegExp.

Static

Реализовано в

JavaScript 1.2, NES 3.0

Версия ECMA

ECMA 262, Edition 3


Описание

multiline это свойство отдельного объекта регулярного выражения.

 

Значение multiline равно true, если был использован флаг "m"; иначе, false. Флаг "m" указывает, что многострочная строка ввода должна рассматриваться как несколько строк. Например, если используется "m", "^" и "$" изменяются с начала и конца целой строки на начало и конец любой строки внутри строки (ввода).

 

Вы не можете изменить это свойство явно.

 


prototype


 

Представляет прототип для данного класса. Вы можете использовать прототип для добавления свойств всем экземплярам класса. О прототипах см. Function.prototype.

Свойство из

RegExp

Реализовано в

JavaScript 1.1, NES 2.0

Версия ECMA

ECMA-262

 


source


 

Свойство только-для-чтения, содержащее текст патэрна, исключая символы /.

Свойство из

Экземпляры RegExp.

Read-only

Реализовано в

JavaScript 1.2, NES 3.0

Версия ECMA

ECMA 262, Edition 3


Описание

source это свойство отдельного объекта регулярного выражения.

 

Вы не можете изменить это свойство явно.

 


test


 

Выполняет поиск совпадения регулярного выражения и специфицированной строки. Возвращает true или false.

Метод из

Экземпляры RegExp.

Реализован в

JavaScript 1.2, NES 3.0

Версия ECMA

ECMA 262, Edition 3


Синтаксис
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


 

Возвращает строку исходного кода объекта.

Метод из

RegExp

Реализован в

JavaScript 1.3


Синтаксис
toSource()


Параметры

Отсутствуют.


Описание

Метод toSource возвращает следующие значения:

Этот метод обычно вызывается внутренне в JavaScript, а не явно в коде.


См. также

Object.toSource.

 


toString


 

Возвращает строку, представляющую специфицированный объект.

Метод из

RegExp

Реализован в

JavaScript 1.1, NES 2.0

Версия ECMA

ECMA 262, Edition 3


Синтаксис
toString()


Параметры

Отсутствуют.


Описание

Объект RegExp переопределяет метод toString объекта Object; он не наследует Object.toString. Для объектов RegExp метод toString возвращает строку, представляющую специфицированный объект.


Примеры

Отображается строковое значение RegExp-объекта:

 

myExp = new RegExp("a+b+c");
alert(myExp.toString())         displays "/a+b+c/"


См. также

Object.toString.

 

 

 

Назад     Вперёд  

Copyright © 2000 Netscape Communications Corp. Все права зарезервированы.

Дата последнего обновления: 28 сентября 2000 г.