RegExp.source: получить текст шаблона без флагов
Source возвращает строковое представление шаблона регулярного выражения без внешних слешей и флагов. Это удобно при диагностике или создании отдельного экземпляра с теми же правилами.
Назначение
Source возвращает строковое представление шаблона регулярного выражения без внешних слешей и флагов. Это удобно при диагностике или создании отдельного экземпляра с теми же правилами.
Как это работает
Для переноса режимов используйте также flags. Новый RegExp не наследует текущую позицию поиска исходного объекта автоматически. Представление source может экранировать символы, поэтому оно не обязано буквально повторять исходный текст программы.
Пример
const original = /lesson-(\d+)/gi;
original.lastIndex = 5;
const copy = new RegExp(original.source, original.flags);
console.assert(copy.source === original.source);
console.assert(copy.flags === original.flags);
console.assert(copy.lastIndex === 0);
console.assert(copy.test("LESSON-42"));
console.assert(original.lastIndex === 5);
console.log(original.source);
Что должно получиться
Новый объект использует тот же шаблон и флаги, но начинает поиск с нуля. Работа копии не изменяет lastIndex оригинала, что важно при независимых обходах.
Граница применения и частая ошибка
Склеивание source нескольких выражений требует учёта групп, обратных ссылок и приоритетов. Не подставляйте пользовательские строки в шаблон как готовый код регулярного выражения. Source не является средством безопасного экранирования произвольного текста.
Самостоятельная проверка
Сравните source, flags и toString одного выражения. Затем проверьте шаблон с литеральным слешем. Объясните, почему новый экземпляр с тем же шаблоном может искать с другой позиции, чем уже использованный исходный объект.
Пример JavaScript проверяйте в собственном учебном файле или консоли своего проекта. Встроенная песочница справочника JavaScript не выполняет. Успешное выполнение в одной среде не гарантирует поддержку метода во всех браузерах.