core-js
Version:
Standard library
42 lines (40 loc) • 1.47 kB
JavaScript
var $ = require('./$')
, global = require('./$.global')
, cof = require('./$.cof')
, $flags = require('./$.flags')
, $RegExp = global.RegExp
, Base = $RegExp
, proto = $RegExp.prototype
, re = /a/g
// "new" creates a new object
, CORRECT_NEW = new $RegExp(re) !== re
// RegExp allows a regex with flags as the pattern
, ALLOWS_RE_WITH_FLAGS = function(){
try {
return $RegExp(re, 'i') == '/a/i';
} catch(e){ /* empty */ }
}();
if(require('./$.support-desc')){
if(!CORRECT_NEW || !ALLOWS_RE_WITH_FLAGS){
$RegExp = function RegExp(pattern, flags){
var patternIsRegExp = cof(pattern) == 'RegExp'
, flagsIsUndefined = flags === undefined;
if(!(this instanceof $RegExp) && patternIsRegExp && flagsIsUndefined)return pattern;
return CORRECT_NEW
? new Base(patternIsRegExp && !flagsIsUndefined ? pattern.source : pattern, flags)
: new Base(patternIsRegExp ? pattern.source : pattern
, patternIsRegExp && flagsIsUndefined ? $flags.call(pattern) : flags);
};
$.each.call($.getNames(Base), function(key){
key in $RegExp || $.setDesc($RegExp, key, {
configurable: true,
get: function(){ return Base[key]; },
set: function(it){ Base[key] = it; }
});
});
proto.constructor = $RegExp;
$RegExp.prototype = proto;
require('./$.redef')(global, 'RegExp', $RegExp);
}
}
require('./$.species')($RegExp);