Регулярные выражения в JavaScript

Для работы с языками, используемыми в Интернете, регулярные выражения играют огромную роль. Они представляют собой объекты (типа RegExp), описывающие текстовые шаблоны. За основу регулярных варажений в JavaScript взято их описание для серверного языка сценариев Perl.

Также, как строковые (символьные) данные задаются в кавычках, регулярные выражения заключаются в символы косой черты (/) (slash).

var regValue = /я$/;
var regValue = new RegExp("я$");

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

Регулярное выражение может описывать как конкретный набор символов (/зуб/ означает строку "зуб", которая может содержаться в любом месте в словах межзубной, зубастый, острозуб и т.п.), так и менее конкретное сочетание, задаваемое спецсимволами, приведенными в табл.1.

Так выражение /зуб$/ означает, что шаблон соответствует расположению в конце строки (острозуб), а выражение /^зуб/ описывает размещение в начале строки (слово зубастый).

Помимо остального, следует учесть, что есть набор из 15 символов, играющих особую роль:

^ $ . * + ? ! : | \ / [ ] { }

Их нельзя использовать в явном виде. Чтобы включть обработку символа, его надо «заэкранировать», поставив перед ним символ \. То есть, символ | означает ИЛИ, а \| – наличие вертикальной черты в выражении. Отдельные аспекты этого разобраны в первой строке таблицы.

Таблица 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".
Выражение /[a-zAZ0-9]/ описывает все латинские буквы и цифры,
/[\u0400-\u04FF]/ – любой кириллический символ,
/[\u0021-\uffff]/ – любой символ, выводимый на экран
[^xyz]Один символ, НЕ совпадающий ни с одним из символов в скобках, кроме любого разделителя строки Unicode. Можно задавать диапазон символов с помощью дефиса.
Например, [^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 в строке, /\cJ/ – с переводом строки (\n)
\dСовпадает с цифровым символом (digit). Эквивалентно [0-9].
Например, /\d/ или /[0–9]/ совпадает с '2' в "B2 is the suite number"
\DСовпадает с любым нецифровым символом. Эквивалентно [^0-9].
Например, /\D/ или /[^0–9]/ совпадает с любой буквой в "B2 is the suite number", но не совпадает с '2'
\fСимвол прогона страницы (form-feed) (\u000C)
\nСимвол перевода строки (linefeed) (\u000A)
\rСимвол возврата каретки (carriage return) (\u000D)
\sЛюбой разделительный символ Unicode, включая space, tab, form feed, line feed. Эквивалентно [\f\n\r\t\v\u00A0\u2028\u2029].
Например, /\s\w*/ совпадает с ' bar' в "foo bar"
\SСовпадает с одиночным символом, отличным от разделительного символа Unicode. Эквивалентно [^\f\n\r\t\v\u00A0\u2028\u2029].
Например, /\S\w*/ совпадает с 'foo' в "foo bar"
\tСовпадает с табуляцией (tab) (\u0009)
\vВертикальная табуляция (vertical tab) (\u0008)
\wСовпадает с любым текстовым символом ASCII, включая символ подчёркивания (underscore). Эквивалентно [A-Za-z0–9_].
Например, /\w/ совпадает с 'a' в "apple," с '5', '2' и '8' в "$5.28", с '3' и 'D' в "3D&"
\WСовпадает с любым символом, не являющимся текстовым символом ASCII. Эквивалентно [^A-Za-z0–9_].
Например, /\W/ или /[^$A-Za-z0–9_]/ совпадает с '%' в «50%»
\nГде n это положительное целое. Обратная ссылка на последнюю подстроку, совпавшую с n вхождений символа в скобках в регулярном выражении (включая левые скобки). (Здесь не совсем чётко... Прим. перев.)
Например, /apple(,)\sorange\1/ совпадает с 'apple, orange,' в "apple, orange, cherry, peach."
\0Символ NUL (\u0000). Не вводите после него других цифр
\xhhСимвол с 16-ричным кодом hh (две 16-ричные цифры)
\uhhhhСимвол с 16-ричным кодом hhhh (четыре 16-ричные цифры).


Copyright © 1993–2020 Мацкявичюс Д.А. Все права защищены.
Никакая часть сайта не может быть воспроизведена никаким способом без письменного разрешения правообладателя и явной ссылки на данный ресурс.