Использование Специальных Символов
Если при поиске требуется нечто большее, чем простое совпадение, например, найти один или более символов 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-ричные цифры).
Содержание раздела