Ядро JavaScript 1.5. Руководство по использованию

Использование Специальных Символов


Если при поиске требуется нечто большее, чем простое совпадение, например, найти один или более символов b или найти пробел, в патэрн включаются специальные символы. Например, патэрн /ab*c/ совпадает с любой комбинацией символов, в которой после одиночной 'a' идёт нуль или более символов 'b" (* означает 0 или более вхождений предшествующего элемента/символа) и сразу за ними - 'c'. В строке "cbbabbbbcdebc" этот патэрн совпадёт с подстрокой 'abbbbc'.


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

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


Символ

Значение

\

Одно из следующих:


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

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

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

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

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

Например, /.n/ совпадает с 'an' и с 'on' в "nay, an apple is on the tree", но не с 'nay'.(x) Совпадает с 'x' и запоминает совпадение. Это называется "захватывающие скобки".

Например, /(foo)/ совпадает с 'foo', и запоминает её, в  "foo bar." Совпадающая подстрока может быть вызвана из элементов результирующего массива [1], ..., [n]. (?:x) Совпадает с 'x', но не запоминает совпадение. Это называется "незахватывающие скобки". Совпадающая подстрока не может быть вызвана из элементов результирующего массива [1], ..., [n].

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's в "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-d]. Совпадает с '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]/ совпадает с '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\u00A0\u2028\u2029].

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

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

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

\t Совпадает с табуляцией/tab.\v Совпадает с вертикальной табуляцией/vertical tab.

\w Совпадает с любым алфавитным символом, включая символ подчёркивания/underscore. Эквивалентно [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." \0 Совпадает с символом NUL. Не вводите после него других цифр.

\xhh Совпадает с символом с 16-ричным кодом hh (две 16-ричные цифры)

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




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