docs: private static Object matchOrReplace(Context cx, Scriptable scope,
                                           Scriptable thisObj, Object[] args,
                                           RegExpImpl reImpl,
                                           GlobData data, NativeRegExp re)
      {
          String str = data.str;
          data.global = (re.getFlags() & NativeRegExp.JSREG_GLOB) != 0;
          int[] indexp = { 0 };
          Object result = null;
          if (data.mode == RA_SEARCH) {
              result = re.executeRegExp(cx, scope, reImpl,
                                        str, indexp, NativeRegExp.TEST);
              if (result != null && result.equals(Boolean.TRUE))
                  result = Integer.valueOf(reImpl.leftContext.length);
              else
                  result = Integer.valueOf(-1);
          } else if (data.global) {
              re.lastIndex = 0d;
              for (int count = 0; indexp[0] <= str.length(); count++) {
                  result = re.executeRegExp(cx, scope, reImpl,
                                            str, indexp, NativeRegExp.TEST);
                  if (result == null || !result.equals(Boolean.TRUE))
                      break;
                  if (data.mode == RA_MATCH) {
                      match_glob(data, cx, scope, count, reImpl);
                  } else {
                      if (data.mode != RA_REPLACE) Kit.codeBug();
                      SubString lastMatch = reImpl.lastMatch;
                      int leftIndex = data.leftIndex;
                      int leftlen = lastMatch.index - leftIndex;
                      data.leftIndex = lastMatch.index + lastMatch.length;
                      replace_glob(data, cx, scope, reImpl, leftIndex, leftlen);
                  }
                  if (reImpl.lastMatch.length == 0) {
                      if (indexp[0] == str.length())
                          break;
                      indexp[0]++;
                  }
              }
          } else {
              result = re.executeRegExp(cx, scope, reImpl, str, indexp,
                                        ((data.mode == RA_REPLACE)
                                         ? NativeRegExp.TEST
                                         : NativeRegExp.MATCH));
          }
  
          return result;
      }