Spec-Zone.ru › JavaScript

RegExp[Symbol.species]

Базовый уровень Широко доступен

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с июля 2015 года.

Статический аксессор RegExp[Symbol.species] возвращает конструктор, используемый для создания копий регулярных выражений в определенных методах RegExp.

Предупреждение: Наличие [Symbol.species] позволяет выполнять произвольный код и может создавать уязвимости безопасности. Это также сильно затрудняет некоторые оптимизации. Разработчики движков исследуют возможность удаления этой функции. По возможности избегайте ее использования.

Синтаксис

RegExp[Symbol.species]

Возвращаемое значение

Значение конструктора (this), для которого был вызван get [Symbol.species]. Возвращаемое значение используется для создания копий экземпляров RegExp.

Описание

Аксессор [Symbol.species] возвращает конструктор по умолчанию для объектов RegExp. Конструкторы подклассов могут переопределять его для изменения назначения конструктора. Реализация по умолчанию выглядит следующим образом:

// Hypothetical underlying implementation for illustration
class RegExp {
  static get [Symbol.species]() {
    return this;
  }
}

Из-за этой полиморфной реализации [Symbol.species] производных подклассов также по умолчанию возвращают сам конструктор.

class SubRegExp extends RegExp {}
SubRegExp[Symbol.species] === SubRegExp; // true

Некоторые методы RegExp создают копию текущего экземпляра регулярного выражения перед выполнением exec(), чтобы побочные эффекты, такие как изменения lastIndex, не сохранялись. Свойство [Symbol.species] используется для определения конструктора нового экземпляра. Методы, которые копируют текущий экземпляр регулярного выражения:

  • [Symbol.matchAll]()
  • [Symbol.split]()

Примеры

Species в обычных объектах

Свойство [Symbol.species] возвращает функцию конструктора по умолчанию, которая является конструктором RegExp для объектов RegExp:

RegExp[Symbol.species]; // function RegExp()

Species в производных объектах

В экземпляре пользовательского подкласса RegExp, такого как MyRegExp, MyRegExp species является конструктором MyRegExp. Однако вы можете захотеть переопределить это, чтобы возвращать родительские объекты RegExp в методах вашего производного класса:

class MyRegExp extends RegExp {
  // Overwrite MyRegExp species to the parent RegExp constructor
  static get [Symbol.species]() {
    return RegExp;
  }
}

Или вы можете использовать это для наблюдения за процессом копирования:

class MyRegExp extends RegExp {
  constructor(...args) {
    console.log("Creating a new MyRegExp instance with args:", args);
    super(...args);
  }
  static get [Symbol.species]() {
    console.log("Copying MyRegExp");
    return this;
  }
  exec(value) {
    console.log("Executing with lastIndex:", this.lastIndex);
    return super.exec(value);
  }
}

Array.from("aabbccdd".matchAll(new MyRegExp("[ac]", "g")));
// Creating a new MyRegExp instance with args: [ '[ac]', 'g' ]
// Copying MyRegExp
// Creating a new MyRegExp instance with args: [ MyRegExp /[ac]/g, 'g' ]
// Executing with lastIndex: 0
// Executing with lastIndex: 1
// Executing with lastIndex: 2
// Executing with lastIndex: 5
// Executing with lastIndex: 6

Спецификации

Спецификация
ECMAScript® 2027 Language Specification
# sec-get-regexp-%symbol.species%

Совместимость с браузерами

Desktop Mobile Server
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet WebView Android WebView on iOS Bun Deno Node.js
@@species
51
13
49
38
10
51
49
41
10
5.0
51
10
1.0.0
1.0
6.5.0

См. также

  • RegExp
  • Symbol.species

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/Symbol.species

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API