--- title: RegExp slug: Web/JavaScript/Reference/Global_Objects/RegExp tags: - Constructor - JavaScript - Reference - RegExp - Référence(2) - регулярные выражения translation_of: Web/JavaScript/Reference/Global_Objects/RegExp ---
Конструктор RegExp создаёт объект регулярного выражения для сопоставления текста с шаблоном.
Введение в то, что представляют собой регулярные выражения, читайте в главе «Регулярные выражения» в руководстве по JavaScript.
Исходный код этого интерактивного примера хранится в репозитории на GitHub. Если вы хотите участвовать в проекте интерактивных примеров, пожалуйста, склонируйте https://github.com/mdn/interactive-examples и пришлите нам запрос на принятие изменений.
Возможны как литеральная запись, так и запись через конструктор:
/pattern/flags
new RegExp(pattern, flags)
patternflagsЕсли определён, может принимать любую комбинацию нижеследующих значений:
gimy {{experimental_inline}}lastIndex этого регулярного выражения (и не пытается сопоставиться с любого более позднего индекса).Существует два способа создания объекта RegExp: литеральная запись и использование конструктора. При записи строк параметры в литеральной записи не используют символы кавычек, в то время как параметры функции-конструктора используют кавычки. Так что следующие выражения создают одинаковые регулярные выражения:
/ab+c/i;
new RegExp('ab+c', 'i');
Литеральная запись обеспечивает компиляцию регулярного выражения при вычислении выражения. Используйте литеральную запись если регулярное выражение будет неизменным. Например, если вы используете литеральную запись для конструирования регулярного выражения, используемого в цикле, регулярное выражение не будет перекомпилироваться на каждой итерации.
Конструктор объекта регулярного выражения, например, new RegExp('ab+c'), обеспечивает компиляцию регулярного выражения во время выполнения. Используйте функцию-конструктор, если вы знаете, что шаблон регулярного выражения будет меняться или если вы не знаете шаблон и получаете его из внешних источников, например, из пользовательского ввода.
При использовании функции-конструктора необходимо использовать обычные правила экранирования в строках (предварять специальные символы символом обратного слеша «\»). Например, следующие выражения эквивалентны:
var re = /\w+/;
var re = new RegExp('\\w+');
| Символьные классы | ||
|---|---|---|
| Символ | Значение | |
| . | (Точка, десятичная запятая) сопоставляется с любым символом за исключением символов новой строки:  Обратите внимание, что флаг многострочности  Например, шаблон  | |
| \d | Сопоставляется с символом цифры в базовом латинском алфавите. Эквивалентен набору символов  Например, шаблоны  | |
| \D | Сопоставляется с любым символом, который не является цифрой в базовом латинском алфавите. Эквивалентен набору символов  Например, шаблоны  | |
| \w | Сопоставляется с любым алфавитно-цифровым символом из базового латинского алфавита, включая символ подчёркивания. Эквивалентен набору символов  Например, шаблон  | |
| \W | Сопоставляется с любым символом из базового латинского алфавита, не являющимся символом, из которых состоят слова. Эквивалентен набору символов  Например, шаблоны  | |
| \s | Сопоставляется с одиночным пробельным символом, который включает в себя пробел, табуляцию, подачу страницы, перевод строки и другие пробельные символы Юникода. Эквивалентен набору символов  Например, шаблон  | |
| \S | Сопоставляется с одиночным символом, не являющимся пробельным. Эквивалентен набору символов  Например, шаблон  | |
| \t | Сопоставляется с символом табуляции. | |
| \r | Сопоставляется с символом возврата каретки. | |
| \n | Сопоставляется с символом перевода строки. | |
| \v | Сопоставляется с символом вертикальной табуляции. | |
| \f | Сопоставляется с символом подачи страницы. | |
| [\b] | Сопоставляется с символом забоя (не перепутайте его с символьным классом \b). | |
| \0 | Сопоставляется с нулевым символом. Не ставьте за ним другую цифру. | |
| \cX | Где  Например, шаблон  | |
| \xhh | Сопоставляется с символом с кодом hh(две шестнадцатеричные цифры). | |
| \uhhhh | Сопоставляется с символом со значением Юникода hhhh(четыре шестнадцатеричные цифры). | |
| \ | Для символов, которые обычно трактуются буквально, указывает, что следующий символ является специальным и не должен интерпретироваться буквально. Например, шаблон  или Для символов, которые обычно трактуются специальным образом, указывает, что следующий символ не является специальным и должен интерпретироваться буквально. Например, звёздочка «*» является специальным символом, обозначающим ноль или более вхождений предшествующего символа при сопоставлении; поэтому шаблон  | |
| Наборы символов | ||
| Символ | Значение | |
| [xyz] | Набор символов. Сопоставляется с любым из заключённых в квадратные скобки символов. С помощью дефиса вы можете определить диапазон символов. Например, шаблон  | |
| [^xyz] | Отрицательный или дополнительный набор символов. То есть он сопоставляется со всеми символами, что не заключены в квадратные скобки. С помощью дефиса вы можете определить диапазон символов. Например, шаблон  | |
| Границы | ||
| Символ | Значение | |
| ^ | Сопоставляется c началом ввода. Если установлен флаг многострочности, также сопоставляется с позицией сразу за символом переноса строки. Например, шаблон  | |
| $ | Сопоставляется c концом ввода. Если установлен флаг многострочности, также сопоставляется с позицией сразу перед символом переноса строки. Например, шаблон  | |
| \b | Сопоставляется с границей слова нулевой ширины, например с позицией между буквой и пробелом (не путайте его с набором символов  Например, шаблон  | |
| \B | Сопоставляется с границей не-слов нулевой ширины, например с позицией между двумя буквами или двумя пробелами. Например, шаблон  | |
| Группировка и обратные ссылки | ||
| Символ | Значение | |
| (x) | Сопоставляется с  Например, шаблон  Захват групп ведёт к проседанию производительности. Если вам не нужно повторно ссылаться на захваченную подстроку, лучше использовать скобки без захвата (смотрите ниже). | |
| \n | Где  Например, шаблон  | |
| (?:x) | Сопоставляется с x, но не запоминает сопоставление. Называется «незахватывающие скобки». Сопоставленную подстроку нельзя достать из элементов[1], ..., [n]результирующего массива или из предопределённых свойств$1, ..., $9объектаRegExp. | |
| Квантификаторы | ||
| Символ | Значение | |
| x* | Сопоставляется с предшествующим элементом x ноль или более раз. Например, шаблон  | |
| x+ | Сопоставляется с предшествующим элементом x один или более раз. Эквивалентен квантификатору  Например, шаблон  | |
| x*?x+? | Сопоставляется с предшествующим элементом x подобно квантификаторам  Например, шаблон  | |
| x? | Сопоставляется с предшествующим элементом x ноль или один раз. Например, шаблон  Если символ используется сразу после какого-то из квантификаторов  Также символ используется в квантификаторах предпросмотра  | |
| x(?=y) | Сопоставлется с x, только если заxследуетy. Например, шаблон/Джек(?=Шпрот)/сопоставлется со строкой «Джек» только если за ней следует строка «Шпрот». Шаблон/Джек(?=Шпрот|Мороз)/сопоставлется со строкой «Джек» только если за ней следуют строки «Шпрот» или «Мороз». Однако, ни «Шпрот», ни «Мороз» не являются частью результата сопоставления. | |
| x(?!y) | Сопоставлется с  Выражение  | |
| (?<=y)x | 
 Например, / | |
| (?<!y)x | 
 | |
| x|y | Сопоставляется либо с  Например, шаблон  | |
| x{n} | Где  Например, шаблон  | |
| x{n,} | Где  Например, шаблон  | |
| x{n,m} | Где  Например, шаблон  | |
RegExp.lengthRegExp.length равно 2.Глобальный объект RegExp не имеет собственных методов, однако, он наследует некоторые методы через цепочку прототипов.
Следующий скрипт использует метод {{jsxref("String.prototype.replace()", "replace()")}} экземпляра строки {{jsxref("Global_Objects/String", "String")}} для сопоставления с именем в формате имя фамилия и выводит его в формате фамилия, имя. В тесте замены скрипт использует заменители $1 и $2, которые заменяются на результаты соответствующих сопоставившихся подгрупп регулярного выражения.
var re = /(\w+)\s(\w+)/; var str = 'John Smith'; var newstr = str.replace(re, '$2, $1'); console.log(newstr); // пример с русскими буквами var re = /([а-яё]+)\s([а-яё]+)/i; var str = 'Джон Смит'; var newstr = str.replace(re, '$2, $1'); console.log(newstr);
Пример выведет «Smith, John» и «Смит, Джон»
Символы конца строки различаются на различных платформах (Unix, Windows и так далее). Разбиение строк из этого примера работает на всех платформах.
var text = 'Некоторый текст\nЕщё текст\r\nИ ещё\rЭто конец'; var lines = text.split(/\r\n|\r|\n/); console.log(lines); // выведет [ 'Некоторый текст', 'Ещё текст', 'И ещё', 'Это конец' ]
Обратите внимание, что порядок шаблонов в регулярном выражении имеет значение.
var s = 'Please yes\nmake my day!'; s.match(/yes.*day/); // Вернёт null s.match(/yes[^]*day/); // Вернёт 'yes\nmake my day'
Этот пример демонстрирует, как можно использовать флаг «липучести» регулярных выражений для сопоставления с отдельными строками многострочного ввода.
var text = 'Первая строка\nВторая строка'; var regex = /(\S+) строка\n?/y; var match = regex.exec(text); console.log(match[1]); // напечатает 'Первая' console.log(regex.lastIndex); // напечатает '14' var match2 = regex.exec(text); console.log(match2[1]); // напечатает 'Вторая' console.log(regex.lastIndex); // напечатает '27' var match3 = regex.exec(text); console.log(match3 === null); // напечатает 'true'
Во время выполнения можно проверить, поддерживается ли флаг «липучести», при помощи блока try { … } catch { … }. Для этого надо использовать либо выражение с eval(…), либо конструктор RegExp(строка-регулярки, строка-с-флагами) (поскольку нотация /регулярка/флаги обрабатывается во время компиляции, исключение будет выброшено до того, как выполнение достигнет блока catch). Например:
var supports_sticky;
try { RegExp('', 'y'); supports_sticky = true; }
catch(e) { supports_sticky = false; }
console.log(supports_sticky); // напечатает 'true'
Как уже сказано выше, символьные классы \w и \W сопоставляются только с базовыми символами ASCII; то есть, с символами от «a» до «z», от «A» до «Z», от «0» до «9» и символом «_». Для сопоставления с символами из других языков, например, с кириллическими или иврита, используйте форму \uhhhh, где «hhhh» — это значение символа Юникода, записанное в шестнадцатеричной форме. Этот пример демонстрирует, как можно выделить символы Юникода, составляющие слова.
var text = 'Образец text на русском языке'; var regex = /[\u0400-\u04FF]+/g; var match = regex.exec(text); console.log(match[0]); // напечатает 'Образец' console.log(regex.lastIndex); // напечатает '7' var match2 = regex.exec(text); console.log(match2[0]); // напечатает 'на' [не 'text'] console.log(regex.lastIndex); // напечатает '15' // и так далее
Вот на этом внешнем ресурсе можно составить полный диапазон блоков Юникода для различных письменностей: regexp-unicode-block.
var url = 'http://xxx.domain.com'; console.log(/[^.]+/.exec(url)[0].substr(7)); // напечатает 'xxx'
| Спецификация | Статус | Комментарии | 
|---|---|---|
| ECMAScript 1-е издание. | Стандарт | Изначальное определение. Реализована в JavaScript 1.1. | 
| {{SpecName('ES5.1', '#sec-15.10', 'RegExp')}} | {{Spec2('ES5.1')}} | |
| {{SpecName('ES6', '#sec-regexp-regular-expression-objects', 'RegExp')}} | {{Spec2('ES6')}} | 
| Возможность | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari | 
|---|---|---|---|---|---|
| Базовая поддержка | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | 
| Флаг «липучести» («y») | {{CompatChrome("39")}} (через флаг) | {{CompatGeckoDesktop("1.9")}} ES4-Style {{bug(773687)}} | {{CompatNo}} | {{CompatNo}} | {{CompatNo}} | 
| Возможность | Android | Chrome для Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile | 
|---|---|---|---|---|---|---|
| Базовая поддержка | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | 
| Флаг «липучести» («y») | {{CompatNo}} | {{CompatNo}} | {{CompatGeckoMobile("1.9")}} ES4-Style {{bug(773687)}} | {{CompatNo}} | {{CompatNo}} | {{CompatNo}} | 
Начиная с Gecko 34 {{geckoRelease(34)}}, в случае захвата группы с квантификаторами, предотвращающими появление группы в результате сопоставления, сопоставившийся текст для захваченной группы теперь имеет значение undefined вместо пустой строки:
// Firefox 33 или более ранние
'x'.replace(/x(.)?/g, function(m, group) {
  console.log("'group:" + group + "'");
}); // 'group:'
// Firefox 34 или более новые
'x'.replace(/x(.)?/g, function(m, group) {
  console.log("'group:" + group + "'");
}); // 'group:undefined'
Обратите внимание, что для поддержания обратной совместимости, свойства RegExp.$N по-прежнему возвращают пустую строку вместо значения undefined (bug 1053944).