示例#1
0
        public static Javascript.Constant replace(Javascript.Constant _this, Javascript.Constant[] arguments, Javascript.Scope scope)
        {
            var exp         = (Javascript.Object)_this;
            var str         = (Javascript.String)arguments[0];
            var replacement = (Javascript.String)arguments[1];
            var source      = ((Javascript.String)exp.Get("source")).Value;

            var options = GetOptions(exp);

            var regex = new Regex(source, options);

            return(new Javascript.String(regex.Replace(str.Value, replacement.Value, (exp.Get <Javascript.Boolean>("global")).Value ? -1 : 1)));
        }
示例#2
0
        public static Javascript.Constant constructor(Javascript.Constant _this, Javascript.Constant[] arguments, Javascript.Scope scope)
        {
            var thisObject = (Javascript.Object)_this;

            thisObject.Set("source", (Javascript.String)arguments[0]);

            var flags = arguments.Length > 1 ? (Javascript.String)arguments[1] : new Javascript.String("");

            thisObject.Set("flags", flags);

            thisObject.Set("global", new Javascript.Boolean(flags.Value.IndexOf(Javascript.Tokens.RegexGlobal) != -1));
            thisObject.Set("ignoreCase", new Javascript.Boolean(flags.Value.IndexOf(Javascript.Tokens.RegexIgnoreCase) != -1));
            thisObject.Set("multiline", new Javascript.Boolean(flags.Value.IndexOf(Javascript.Tokens.RegexMultiLine) != -1));
            thisObject.Set("unicode", new Javascript.Boolean(flags.Value.IndexOf(Javascript.Tokens.RegexUnicode) != -1));
            thisObject.Set("sticky", new Javascript.Boolean(flags.Value.IndexOf(Javascript.Tokens.RegexSticky) != -1));

            return(Javascript.Static.Undefined);
        }
示例#3
0
        public static Javascript.Constant test(Javascript.Constant _this, Javascript.Constant[] arguments, Javascript.Scope scope)
        {
            if (arguments[0] is Javascript.Undefined)
            {
                arguments[0] = new Javascript.String("");
            }

            return(new Javascript.Boolean(!(match(_this, arguments, scope) is Javascript.Null)));
        }
示例#4
0
        public static Javascript.Constant match(Javascript.Constant _this, Javascript.Constant[] arguments, Javascript.Scope scope)
        {
            var exp    = (Javascript.Object)_this;
            var str    = ((Javascript.String)arguments[0]).Value;
            var source = ((Javascript.String)exp.Get("source")).Value;

            var options = GetOptions(exp);

            var result = new List <string>();

            if ((exp.Get <Javascript.Boolean>("global")).Value)
            {
                var matches = Regex.Matches(str, source, options);

                if (matches.Count == 0)
                {
                    return(Javascript.Static.Null);
                }

                foreach (Match match in matches)
                {
                    result.Add(match.Value);
                }
            }
            else
            {
                var match = Regex.Match(str, source, options);

                if (!match.Success)
                {
                    return(Javascript.Static.Null);
                }

                result.Add(match.Value);
                foreach (Group group in match.Groups)
                {
                    result.Add(group.Value);
                }
            }

            return(Tool.ToArray(result, scope));
        }
示例#5
0
        public static Javascript.Constant split(Javascript.Constant _this, Javascript.Constant[] arguments, Javascript.Scope scope)
        {
            var exp    = (Javascript.Object)_this;
            var str    = (Javascript.String)arguments[0];
            var source = ((Javascript.String)exp.Get("source")).Value;

            var options = GetOptions(exp);

            var result = Regex.Split(str.Value, source, options);

            return(Tool.ToArray(result, scope));
        }
示例#6
0
        public static Javascript.Constant search(Javascript.Constant _this, Javascript.Constant[] arguments, Javascript.Scope scope)
        {
            var exp    = (Javascript.Object)_this;
            var str    = (Javascript.String)arguments[0];
            var source = ((Javascript.String)exp.Get("source")).Value;

            var options = GetOptions(exp);

            var match = Regex.Match(str.Value, source, options);

            if (match.Success)
            {
                return(new Javascript.Number(match.Index));
            }
            else
            {
                return(new Javascript.Number(-1));
            }
        }
示例#7
0
        public static Javascript.Constant parse(Javascript.Constant _this, Javascript.Constant[] arguments, Javascript.Scope scope)
        {
            var s = ((Javascript.String)arguments[0]).Value.Trim();

            if (s.Length == 0)
            {
                return(Javascript.Static.Undefined);
            }

            if (s[0] == '{')
            {
                var json = JsonParser.StringToJsonObject(s);
                return(Convert.JsonToObject(json, scope));
            }
            else if (s[0] == '[')
            {
                var json = JsonParser.StringToJsonList(s);
                return(Convert.JsonToValue(json, scope));
            }

            return(Javascript.Static.Undefined);
        }
示例#8
0
        public static Javascript.Constant stringify(Javascript.Constant _this, Javascript.Constant[] arguments, Javascript.Scope scope)
        {
            if (arguments.Length == 0)
            {
                return(Javascript.Static.Undefined);
            }

            var beautify = arguments.Length > 1 ? Tool.GetArgument <Javascript.Boolean>(arguments, 1, "JSON.stringify").Value : false;

            var json = Convert.ValueToJson(arguments[0], scope);

            return(new Javascript.String(JsonParser.ValueToString(json, beautify)));
        }