code: function RegExpExecJS(string) {
    if (!IS_REGEXP(this)) {
      throw MakeTypeError(kIncompatibleMethodReceiver,
                          'RegExp.prototype.exec', this);
    }
  
    string = TO_STRING(string);
    var lastIndex = this.lastIndex;
  
    // Conversion is required by the ES2015 specification (RegExpBuiltinExec
    // algorithm, step 4) even if the value is discarded for non-global RegExps.
    var i = TO_LENGTH(lastIndex);
  
    var updateLastIndex = REGEXP_GLOBAL(this) || REGEXP_STICKY(this);
    if (updateLastIndex) {
      if (i < 0 || i > string.length) {
        this.lastIndex = 0;
        return null;
      }
    } else {
      i = 0;
    }
  
    // matchIndices is either null or the RegExpLastMatchInfo array.
    var matchIndices = %_RegExpExec(this, string, i, RegExpLastMatchInfo);
  
    if (IS_NULL(matchIndices)) {
      this.lastIndex = 0;
      return null;
    }
  
    // Successful match.
    if (updateLastIndex) {
      this.lastIndex = RegExpLastMatchInfo[CAPTURE1];
    }
    RETURN_NEW_RESULT_FROM_MATCH_INFO(matchIndices, string);
  }
docs: Legacy implementation of RegExp.prototype.exec