public static ExpressionParser AddRegex(this ExpressionParser parser)
 {
     parser.Functions["regex"] = RegexFunc;
     return(parser);
 }
        //private static JToken MountedFromFunc(JToken document, JToken[] arg)
        //{
        //    return document.SelectToken($"$.volumes.{arg[0].ToString()}.mountedFrom").ToString();
        //}

        //private static JToken MountedAtFunc(JToken document, JToken[] arg)
        //{
        //    var volumne = document.SelectToken($"$.volumes.{arg[0].ToString()}");
        //    if (volumne == null)
        //    {
        //        throw new Exception($"The volume with name {arg[0].ToString()} was not found");
        //    }
        //    return volumne.SelectToken("$.mountedAt").ToString();
        //}

        public static ExpressionParser AddConcat(this ExpressionParser parser)
        {
            parser.Functions["concat"] = (document, arguments) => string.Join("", arguments.Select(k => k.ToString()));
            return(parser);
        }
 public static ExpressionParser AddSplit(this ExpressionParser parser)
 {
     parser.Functions["split"] = (document, arguments) => JArray.FromObject(arguments.First().ToString().Split(arguments.Skip(1).FirstOrDefault()?.ToString() ?? ","));
     return(parser);
 }
 public FunctionEvaluator(ExpressionParser evaluator, string name, IJTokenEvaluator[] parameters)
 {
     this.name       = name;
     this.parameters = parameters;
     this.evaluator  = evaluator;
 }