| 'use strict'; | 
| var DESCRIPTORS = require('../internals/descriptors'); | 
| var globalThis = require('../internals/global-this'); | 
| var uncurryThis = require('../internals/function-uncurry-this'); | 
| var isForced = require('../internals/is-forced'); | 
| var inheritIfRequired = require('../internals/inherit-if-required'); | 
| var createNonEnumerableProperty = require('../internals/create-non-enumerable-property'); | 
| var create = require('../internals/object-create'); | 
| var getOwnPropertyNames = require('../internals/object-get-own-property-names').f; | 
| var isPrototypeOf = require('../internals/object-is-prototype-of'); | 
| var isRegExp = require('../internals/is-regexp'); | 
| var toString = require('../internals/to-string'); | 
| var getRegExpFlags = require('../internals/regexp-get-flags'); | 
| var stickyHelpers = require('../internals/regexp-sticky-helpers'); | 
| var proxyAccessor = require('../internals/proxy-accessor'); | 
| var defineBuiltIn = require('../internals/define-built-in'); | 
| var fails = require('../internals/fails'); | 
| var hasOwn = require('../internals/has-own-property'); | 
| var enforceInternalState = require('../internals/internal-state').enforce; | 
| var setSpecies = require('../internals/set-species'); | 
| var wellKnownSymbol = require('../internals/well-known-symbol'); | 
| var UNSUPPORTED_DOT_ALL = require('../internals/regexp-unsupported-dot-all'); | 
| var UNSUPPORTED_NCG = require('../internals/regexp-unsupported-ncg'); | 
|   | 
| var MATCH = wellKnownSymbol('match'); | 
| var NativeRegExp = globalThis.RegExp; | 
| var RegExpPrototype = NativeRegExp.prototype; | 
| var SyntaxError = globalThis.SyntaxError; | 
| var exec = uncurryThis(RegExpPrototype.exec); | 
| var charAt = uncurryThis(''.charAt); | 
| var replace = uncurryThis(''.replace); | 
| var stringIndexOf = uncurryThis(''.indexOf); | 
| var stringSlice = uncurryThis(''.slice); | 
| // TODO: Use only proper RegExpIdentifierName | 
| var IS_NCG = /^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/; | 
| var re1 = /a/g; | 
| var re2 = /a/g; | 
|   | 
| // "new" should create a new object, old webkit bug | 
| var CORRECT_NEW = new NativeRegExp(re1) !== re1; | 
|   | 
| var MISSED_STICKY = stickyHelpers.MISSED_STICKY; | 
| var UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y; | 
|   | 
| var BASE_FORCED = DESCRIPTORS && | 
|   (!CORRECT_NEW || MISSED_STICKY || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG || fails(function () { | 
|     re2[MATCH] = false; | 
|     // RegExp constructor can alter flags and IsRegExp works correct with @@match | 
|     // eslint-disable-next-line sonarjs/inconsistent-function-call -- required for testing | 
|     return NativeRegExp(re1) !== re1 || NativeRegExp(re2) === re2 || String(NativeRegExp(re1, 'i')) !== '/a/i'; | 
|   })); | 
|   | 
| var handleDotAll = function (string) { | 
|   var length = string.length; | 
|   var index = 0; | 
|   var result = ''; | 
|   var brackets = false; | 
|   var chr; | 
|   for (; index <= length; index++) { | 
|     chr = charAt(string, index); | 
|     if (chr === '\\') { | 
|       result += chr + charAt(string, ++index); | 
|       continue; | 
|     } | 
|     if (!brackets && chr === '.') { | 
|       result += '[\\s\\S]'; | 
|     } else { | 
|       if (chr === '[') { | 
|         brackets = true; | 
|       } else if (chr === ']') { | 
|         brackets = false; | 
|       } result += chr; | 
|     } | 
|   } return result; | 
| }; | 
|   | 
| var handleNCG = function (string) { | 
|   var length = string.length; | 
|   var index = 0; | 
|   var result = ''; | 
|   var named = []; | 
|   var names = create(null); | 
|   var brackets = false; | 
|   var ncg = false; | 
|   var groupid = 0; | 
|   var groupname = ''; | 
|   var chr; | 
|   for (; index <= length; index++) { | 
|     chr = charAt(string, index); | 
|     if (chr === '\\') { | 
|       chr += charAt(string, ++index); | 
|     } else if (chr === ']') { | 
|       brackets = false; | 
|     } else if (!brackets) switch (true) { | 
|       case chr === '[': | 
|         brackets = true; | 
|         break; | 
|       case chr === '(': | 
|         result += chr; | 
|         // ignore non-capturing groups | 
|         if (stringSlice(string, index + 1, index + 3) === '?:') { | 
|           continue; | 
|         } | 
|         if (exec(IS_NCG, stringSlice(string, index + 1))) { | 
|           index += 2; | 
|           ncg = true; | 
|         } | 
|         groupid++; | 
|         continue; | 
|       case chr === '>' && ncg: | 
|         if (groupname === '' || hasOwn(names, groupname)) { | 
|           throw new SyntaxError('Invalid capture group name'); | 
|         } | 
|         names[groupname] = true; | 
|         named[named.length] = [groupname, groupid]; | 
|         ncg = false; | 
|         groupname = ''; | 
|         continue; | 
|     } | 
|     if (ncg) groupname += chr; | 
|     else result += chr; | 
|   } return [result, named]; | 
| }; | 
|   | 
| // `RegExp` constructor | 
| // https://tc39.es/ecma262/#sec-regexp-constructor | 
| if (isForced('RegExp', BASE_FORCED)) { | 
|   var RegExpWrapper = function RegExp(pattern, flags) { | 
|     var thisIsRegExp = isPrototypeOf(RegExpPrototype, this); | 
|     var patternIsRegExp = isRegExp(pattern); | 
|     var flagsAreUndefined = flags === undefined; | 
|     var groups = []; | 
|     var rawPattern = pattern; | 
|     var rawFlags, dotAll, sticky, handled, result, state; | 
|   | 
|     if (!thisIsRegExp && patternIsRegExp && flagsAreUndefined && pattern.constructor === RegExpWrapper) { | 
|       return pattern; | 
|     } | 
|   | 
|     if (patternIsRegExp || isPrototypeOf(RegExpPrototype, pattern)) { | 
|       pattern = pattern.source; | 
|       if (flagsAreUndefined) flags = getRegExpFlags(rawPattern); | 
|     } | 
|   | 
|     pattern = pattern === undefined ? '' : toString(pattern); | 
|     flags = flags === undefined ? '' : toString(flags); | 
|     rawPattern = pattern; | 
|   | 
|     if (UNSUPPORTED_DOT_ALL && 'dotAll' in re1) { | 
|       dotAll = !!flags && stringIndexOf(flags, 's') > -1; | 
|       if (dotAll) flags = replace(flags, /s/g, ''); | 
|     } | 
|   | 
|     rawFlags = flags; | 
|   | 
|     if (MISSED_STICKY && 'sticky' in re1) { | 
|       sticky = !!flags && stringIndexOf(flags, 'y') > -1; | 
|       if (sticky && UNSUPPORTED_Y) flags = replace(flags, /y/g, ''); | 
|     } | 
|   | 
|     if (UNSUPPORTED_NCG) { | 
|       handled = handleNCG(pattern); | 
|       pattern = handled[0]; | 
|       groups = handled[1]; | 
|     } | 
|   | 
|     result = inheritIfRequired(NativeRegExp(pattern, flags), thisIsRegExp ? this : RegExpPrototype, RegExpWrapper); | 
|   | 
|     if (dotAll || sticky || groups.length) { | 
|       state = enforceInternalState(result); | 
|       if (dotAll) { | 
|         state.dotAll = true; | 
|         state.raw = RegExpWrapper(handleDotAll(pattern), rawFlags); | 
|       } | 
|       if (sticky) state.sticky = true; | 
|       if (groups.length) state.groups = groups; | 
|     } | 
|   | 
|     if (pattern !== rawPattern) try { | 
|       // fails in old engines, but we have no alternatives for unsupported regex syntax | 
|       createNonEnumerableProperty(result, 'source', rawPattern === '' ? '(?:)' : rawPattern); | 
|     } catch (error) { /* empty */ } | 
|   | 
|     return result; | 
|   }; | 
|   | 
|   for (var keys = getOwnPropertyNames(NativeRegExp), index = 0; keys.length > index;) { | 
|     proxyAccessor(RegExpWrapper, NativeRegExp, keys[index++]); | 
|   } | 
|   | 
|   RegExpPrototype.constructor = RegExpWrapper; | 
|   RegExpWrapper.prototype = RegExpPrototype; | 
|   defineBuiltIn(globalThis, 'RegExp', RegExpWrapper, { constructor: true }); | 
| } | 
|   | 
| // https://tc39.es/ecma262/#sec-get-regexp-@@species | 
| setSpecies('RegExp'); |