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

RegExp


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

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

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

 

Объект ядраРеализован в

JavaScript 1.2, NES 3.0

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

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 &nbsp&nbsp Специальные символы в регулярных выражениях

    Символ

    Значение\

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

    Например, /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".

    TD>*

    Совпадение с предыдущим символом 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 смоделировал свои регулярные выражения.

    Свойство

    Описание

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

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

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

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

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


     

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

    Метод

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

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

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

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


    Примеры

    Пример 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>



    Содержание раздела