code: function matchRegExp(oRule, context, options) {
      if (context[oRule.key] === undefined) {
          return undefined;
      }
      var sKey = oRule.key;
      var s1 = context[oRule.key].toLowerCase();
      var reg = oRule.regexp;
      var m = reg.exec(s1);
      if (debuglogV.enabled) {
          debuglogV("applying regexp: " + s1 + " " + JSON.stringify(m));
      }
      if (!m) {
          return undefined;
      }
      options = options || {};
      var delta = compareContext(context, oRule.follows, oRule.key);
      debuglogV(function () { return JSON.stringify(delta); });
      debuglogV(function () { return JSON.stringify(options); });
      if (options.matchothers && (delta.different > 0)) {
          return undefined;
      }
      var oExtractedContext = extractArgsMap(m, oRule.argsMap);
      debuglogV(function () { return "extracted args " + JSON.stringify(oRule.argsMap); });
      debuglogV(function () { return "match " + JSON.stringify(m); });
      debuglogV(function () { return "extracted args " + JSON.stringify(oExtractedContext); });
      var res = AnyObject.assign({}, oRule.follows);
      res = AnyObject.assign(res, oExtractedContext);
      res = AnyObject.assign(res, context);
      if (oExtractedContext[sKey] !== undefined) {
          res[sKey] = oExtractedContext[sKey];
      }
      if (options.override) {
          res = AnyObject.assign(res, oRule.follows);
          res = AnyObject.assign(res, oExtractedContext);
      }
      Object.freeze(res);
      debuglog(debuglog.enabled ? ('Found one' + JSON.stringify(res, undefined, 2)) : '-');
      return res;
  }
docs: / below may no longer be used