You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.6 KiB
43 lines
1.6 KiB
var global = require('./_global'); |
|
var inheritIfRequired = require('./_inherit-if-required'); |
|
var dP = require('./_object-dp').f; |
|
var gOPN = require('./_object-gopn').f; |
|
var isRegExp = require('./_is-regexp'); |
|
var $flags = require('./_flags'); |
|
var $RegExp = global.RegExp; |
|
var Base = $RegExp; |
|
var proto = $RegExp.prototype; |
|
var re1 = /a/g; |
|
var re2 = /a/g; |
|
// "new" creates a new object, old webkit buggy here |
|
var CORRECT_NEW = new $RegExp(re1) !== re1; |
|
|
|
if (require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function () { |
|
re2[require('./_wks')('match')] = false; |
|
// RegExp constructor can alter flags and IsRegExp works correct with @@match |
|
return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i'; |
|
}))) { |
|
$RegExp = function RegExp(p, f) { |
|
var tiRE = this instanceof $RegExp; |
|
var piRE = isRegExp(p); |
|
var fiU = f === undefined; |
|
return !tiRE && piRE && p.constructor === $RegExp && fiU ? p |
|
: inheritIfRequired(CORRECT_NEW |
|
? new Base(piRE && !fiU ? p.source : p, f) |
|
: Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f) |
|
, tiRE ? this : proto, $RegExp); |
|
}; |
|
var proxy = function (key) { |
|
key in $RegExp || dP($RegExp, key, { |
|
configurable: true, |
|
get: function () { return Base[key]; }, |
|
set: function (it) { Base[key] = it; } |
|
}); |
|
}; |
|
for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]); |
|
proto.constructor = $RegExp; |
|
$RegExp.prototype = proto; |
|
require('./_redefine')(global, 'RegExp', $RegExp); |
|
} |
|
|
|
require('./_set-species')('RegExp');
|
|
|