Объект - регулярное выражение, содержащий патэрн регулярного выражения. Он имеет
свойства и методы для использования этого регулярного выражения при поиске и замене совпадений в строках.
Помимо свойств отдельного объекта регулярного выражения, который Вы создаёте
через использование функции-конструктора RegExp, предопределённый
объект RegExp имеет static-свойства, которые устанавливаются всякий
раз при использовании любого регулярного выражения.
Формат текста литерала функции-конструктора RegExp.
Формат литерала используется так:
/pattern/flags
Функция-конструктор используется так:
new RegExp("pattern"[, "flags"])
Параметры
pattern
Текст регулярного выражения.
flags
Если флаги специфицированы, они имеют следующие значения:
g: глобальное совпадение
i: игнорировать регистр
gi: глобальное совпадение и игнорирование регистра
Заметьте, что параметры формата литерала не используют знаки кавычек для
обозначения строк, а параметры функции-конструктора - используют. Так, следующие
выражения создают одно регулярное выражение:
/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
Совпадает с '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]
Совпадает с backspace. (Не путайте с \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 это управляющий символ. Совпадает с управляющим символом в строке.
Например, /\cM/ совпадает с control-M в строке.
\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
Совпадает с form-feed/прогоном страницы.
\n
Совпадает с linefeed/прогоном строки.
\r
Совпадает с carriage return/возвратом каретки.
\s
Совпадает с одиночным пробельным символом, включая space, tab, form feed, line feed.
Эквивалентно [ \f\n\r\t\v].
Например, /\s\w*/ совпадает с ' bar' в "foo bar."
\S
Совпадает с одиночным символом, отличным от пробельного символа. Эквивалентно [^ \f\n\r\t\v].
Например, /\S/\w* совпадает с 'foo' в "foo bar."
\t
Совпадает с tab/табуляцией.
\v
Совпадает с vertical tab/вертикальной табуляцией.
\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 \xhex
Где \ooctal это 8-ричное escape-значение или
где \xhex это 16-ричное escape-значение. Позволяет внедрять ASCII-коды в регулярные выражения.
Литеральная нотация предоставляет компиляцию регулярного выражения при
вычислении выражения. Используйте литеральную нотацию, если регулярное выражение
останется константным. Например, если Вы используете литеральную нотацию для
построения регулярного выражения, используемого в цикле, регулярное выражение не
будет перекомпилироваться при каждой итерации.
Конструктор объекта регулярного выражения, например, new RegExp("ab+c"),
предоставляет компиляцию регулярного выражения на этапе прогона. Используйте
функцию-конструктор, если Вы знаете, что патэрн регулярного выражения будет
изменяться, или если патэрн Вам не известен и получается из другого источника,
как при вводе пользователя. После того как Вы определили регулярное выражение, и
если это регулярное выражение используется по всему скрипту и может изменяться,
Вы можете использовать метод compile для
компиляции нового регулярного выражения для обеспечения эффективного многократного использования.
Отдельный предопределённый объект RegExp имеется в каждом окне; то
есть каждый отдельный поток выполнения JavaScript получает свой собственный
объект RegExp. Поскольку каждый скрипт запускается на выполнение
без прерывания потока, это гарантирует, что разные скрипты не перепишут значения объекта RegExp.
Обратите внимание, что некоторые свойства объекта RegExp имеют
длинные и сокращённые (Perl-подобные) имена. Оба имени всегда ссылаются на одно
и то же значение. Perl это язык программирования, из которого JavaScript смоделировал регулярные выражения.
Возвращает литерал объекта, представляющий специфицированный объект; Вы можете
использовать это значение для создания нового объекта. Переопределяет метод Object.toSource.
Возвращает примитивное значение специфицированного объекта. Переопределяет
метод Object.valueOf.
Кроме того, этот объект наследует методы watch
и unwatch из объекта Object.
Примеры
Пример 1. Следующий скрипт использует метод replace для
переключения слов в строке. Для заменяющего текста скрипт использует значения
свойств $1 и $2глобального объекта RegExp.
Обратите внимание, что имя объекта RegExp не предшествует свойствам $,
когда они передаются как второй аргумент методу replace.
Пример 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.
Поскольку input является static-свойством, оно не является
свойством отдельного объекта регулярного выражения. Поэтому Вы всегда используете его так: RegExp.input.
Количество подстрок в скобках не ограничивается, но предопределённый объект RegExp
может содержать только последние девять. Вы можете иметь доступ ко всем подстрокам в скобках через возвращаемые индексы массива.
Эти свойства могут использоваться в замещающем тексте для метода String.replace.
При таком использовании не вводите перед ними префикс RegExp.
Пример далее иллюстрирует это. Если скобки не включены в регулярное выражение,
скрипт интерпретирует $n литерально (где n это положительное целое число).
Пример
Этот скрипт использует метод replace для переключения слов в строке.
Для заменяющего текста скрипт использует значения свойств $1 и $2
глобального объекта RegExp. Обратите внимание, что имя объекта RegExp
не предшествует свойствам $, когда они передаются как второй аргумент методу replace.
Имя регулярного выражения. Может быть именем переменной или литералом.
pattern
Строка, содержащая текст регулярного выражения.
flags
Если флаги специфицированы, могут иметь одно из следующих значений:
"g": глобальный поиск совпадения
"i": игнорировать регистр символов
"gi": глобальный поиск и игнорирование регистра
Описание
Метод compile используется для компиляции регулярного выражения,
созданного функцией-конструктором RegExp. Это форсирует компиляцию
регулярного выражения только однократно, что означает, что регулярное выражение
не компилируется всякий раз при его обнаружении. Используйте метод compile,
когда Вам известно, что регулярное выражение будет константным (после получения
его патэрна) и будет многократно использоваться в скрипте.
Вы можете также использовать метод compile для изменения
регулярного выражения в процессе выполнения. Например, если регулярное выражение
изменяется, вы можете использовать метод compile для рекомпиляции
объекта для повышения эффективности последующего неоднократного использования.
Вызов этого метода изменяет значение свойств source, global
и ignoreCase регулярного выражения.
constructor
Специфицирует функцию, которая создаёт прототип объекта. Обратите внимание, что
значением этого свойства является ссылка на саму функцию, а не строка, содержащая имя функции.
Имя регулярного выражения. Это может быть имя переменной или литерал.
str
Строка, относительно которой производится поиск совпадений регулярного
выражения. Если отсутствует, используется значение RegExp.input.
Описание
Как видно из описания синтаксиса, метод exec регулярного выражения
может быть вызван напрямую (regexp.exec(str)) или неявно (regexp(str)).
Если Вы ищете совпадение просто для того, чтобы
определить true или false,
используйте метод test или метод Stringsearch.
Если совпадение найдено, метод exec возвращает массив и обновляет
свойства объекта регулярного выражения и предопределённого объекта регулярного
выражения, RegExp. Если совпадение не найдено, метод 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
myRe
lastIndex
Индекс начала следующего совпадения.
5
ignoreCase
Указывает, используется ли флаг "i" для игнорирования регистра символов
true
global
Указывает, используется ли флаг "g" для глобального поиска совпадения
true
source
Текст патэрна
d(b+)(d)
RegExp
lastMatch $&
Последние совпавшие символы
dbBd
leftContext $\Q
Подстрока, предшествующая последнему совпадению
c
rightContext $'
Подстрока, идущая после последнего совпадения
bsbz
$1, ...$9
Совпадения подстрок в скобках, если имеются. Количество возможных подстрок в
скобках не ограничивается, но RegExp может содержать только последние девять.
$1 = bB $2 = d
lastParen $+
Последнее совпадение подстроки в скобках, если имеется.
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, возможно, с получением их из базы данных party.
global это свойство отдельного объекта регулярного выражения.
Значение global будет true, если флаг "g"
используется; иначе - false. Флаг "g" указывает, что
регулярное выражение должно проверяться относительно всех возможных совпадений в строке.
Вы не можете изменять это свойство явно. Однако вызов метода compile
изменяет значение этого свойства.
ignoreCase это свойство отдельного объекта регулярного выражения.
Значение ignoreCase будет true, если флаг "i"
используется; иначе - false. Флаг "i" указывает, что
регистр символов должен игнорироваться при поиске совпадений в строке.
Вы не можете изменять это свойство явно. Однако вызов метода
compile изменяет значение этого свойства.
input
Строка, относительно которой выполняется поиск совпадений
с регулярным
выражением. $_ является другим именем этого свойства.
Поскольку 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
Целочисленное свойство чтения/записи, которое специфицирует индекс, с которого
стартует следующий поиск совпадения.
lastIndex это свойство отдельного объекта регулярного выражения.
Это свойство устанавливается, только если регулярное выражение использовало флаг "g"
для выполнения глобального поиска. Применяются следующие правила:
Если lastIndex превышает размер строки, regexp.test
и regexp.exec терпят неудачу, а lastIndex
устанавливается в 0.
Если lastIndex равен длине строки и если регулярное выражение
совпадает с пустой строкой, то регулярное выражение совпадает с вводом,
начиная с lastIndex.
Если lastIndex равен длине строки и если регулярное выражение не
совпадает с пустой строкой, то регулярное выражение не совпадает с вводом, а lastIndex
снова устанавливается в 0.
Иначе lastIndex устанавливается в следующую позицию после самого последнего совпадения.
Например, рассмотрим следующую последовательность операторов:
re = /(hi)?/g
Совпадает с пустой строкой.
re("hi")
Возвращает ["hi", "hi"] с lastIndex, равным 2.
re("hi")
Возвращает [""], пустой массив, чей нулевой элемент является
совпавшей строкой. В данном случае это пустая строка, поскольку lastIndex
был 2 (и всё ещё остаётся 2), а "hi" имеет размер 2.
lastMatch
Последние совпавшие символы. $& это другое имя этого же самого свойства.
Поскольку lastMatch это static-свойство, оно не является свойством
отдельного объекта регулярного выражения. Вы должны всегда использовать его так: RegExp.lastMatch.
lastParen
Последнее совпадение подстроки в скобках, если имеется. $+ это
другое имя этого же самого свойства.
Поскольку lastParen iэто static-свойство, оно не является свойством
отдельного объекта регулярного выражения. Вы должны всегда использовать его так: RegExp.lastParen.
leftContext
Подстрока, предшествующая самому последнему совпадению. $` это другое имя этого же самого свойства.
Поскольку leftContext это statiс-свойство, оно не является свойством
отдельного объекта регулярного выражения. Вы должны всегда использовать его так: RegExp.leftContext.
multiline
Искать ли на нескольких строках. $* это другое имя этого же самого свойства.
Поскольку multiline это statiс-свойство, оно не является свойством
отдельного объекта регулярного выражения. Вы должны всегда использовать его так: RegExp.multiline.
Значение multiline будет true, если выполняется поиск
на нескольких строках текста, false - если поиск обязан остановиться на символе конца строки.
Скрипт или браузер могут предустанавливать свойство multiline. Если
обработчик события вызывается из элемента TEXTAREA, браузер
устанавливает multiline в true. multiline очищается после завершения работы обработчика события.
Это означает, что, если Вы предварительно установили multiline в true,
оно восстанавливается в false после выполнения работы любого обработчика события.
prototype
Предоставляет прототип для данного класса. Вы можете использовать этот прототип
для добавления свойств или методов во все экземпляры класса. О прототипах см. Function.prototype.
Поскольку rightContext это statiс-свойство, оно не является
свойством отдельного объекта регулярного выражения. Вы должны всегда
использовать его так: RegExp.rightContext.
source
Свойство "только для чтения", содержащее текст патэрна, исключая слэши (/) и
флаги "g" и "i".
Имя регулярного выражения. Это может быть имя переменной или литерал.
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
Возвращает строку, представляющую исходный код объекта.
Объект RegExp переопределяет метод toString
объекта Object; он не наследует Object.toString.
Для объектов RegExp метод toString
возвращает строковое представление объекта.
Пример
Выводится строка, отображающая строковое значение объекта RegExp:
myExp = new RegExp("a+b+c"); alert(myExp.toString()) // выведет "/a+b+c/"