| 'use strict'; | 
| var call = require('../internals/function-call'); | 
| var anObject = require('../internals/an-object'); | 
| var isCallable = require('../internals/is-callable'); | 
| var classof = require('../internals/classof-raw'); | 
| var regexpExec = require('../internals/regexp-exec'); | 
|   | 
| var $TypeError = TypeError; | 
|   | 
| // `RegExpExec` abstract operation | 
| // https://tc39.es/ecma262/#sec-regexpexec | 
| module.exports = function (R, S) { | 
|   var exec = R.exec; | 
|   if (isCallable(exec)) { | 
|     var result = call(exec, R, S); | 
|     if (result !== null) anObject(result); | 
|     return result; | 
|   } | 
|   if (classof(R) === 'RegExp') return call(regexpExec, R, S); | 
|   throw new $TypeError('RegExp#exec called on incompatible receiver'); | 
| }; |