public bool Split(BackgroundWorker worker, RegexTesterPageViewModel viewModel, RegexProcessContext context)
        {
            viewModel.AppendOutputText("string pattern = @\"" + StringFormat(context.MatchRegex.ToString()) + "\";");
            viewModel.AppendOutputText("RegexOptions regexOptions = " + GetRegexOptions(context.MatchRegex.Options) + ";");
            viewModel.AppendOutputText("Regex regex = new Regex(pattern, regexOptions);");
            viewModel.AppendOutputText("string inputData = @\"" + StringFormat(context.InputText) + "\";");
            viewModel.AppendOutputText("string[] result = regex.Split(inputData);");

            return OperationIsComplete(worker, viewModel);
        }
        public bool Replace(BackgroundWorker worker, RegexTesterPageViewModel viewModel, RegexProcessContext context)
        {
            if (!RegexIsMatch(context))
            {
                return OperationIsComplete(worker);
            }

            int count = 0;
            string result = context.MatchRegex.Replace(context.InputText, delegate(Match m)
            {
                string value = context.ReplaceRegexPattern;
                foreach (var groupName in context.MatchRegex.GetGroupNames())
                {
                    if (worker.CancellationPending)
                        return string.Empty;

                    value = value.Replace(string.Format("${{{0}}}", groupName), m.Groups[groupName].Value);
                }
                count++;
                return value;
            });
            viewModel.Count = count;
            viewModel.AppendOutputText(result);
            return OperationIsComplete(worker);
        }
        public bool Match(BackgroundWorker worker, RegexTesterPageViewModel viewModel, RegexProcessContext context)
        {
            if (!RegexIsMatch(context))
            {
                return OperationIsComplete(worker);
            }

            var matches = context.MatchRegex.Matches(context.InputText);

            int count = 0;
            var isSimpleMatch = string.IsNullOrEmpty(context.ReplaceRegexPattern);

            Dictionary<String, String> groups = GetMatchGroups(context, isSimpleMatch);

            foreach (Match item in matches)
            {
                if (worker.CancellationPending)
                    return false;

                if (item.Success)
                {
                    if (isSimpleMatch)
                    {
                        viewModel.AppendOutputText(item.Value);
                    }
                    else
                    {
                        string result = context.ReplaceRegexPattern;
                        foreach (var group in groups)
                        {
                            result = result.Replace(group.Value, item.Groups[group.Key].Value);
                        }
                        viewModel.AppendOutputText(result);
                    }
                    count++;
                }
            }
            viewModel.Count = count;
            return OperationIsComplete(worker);
        }
        public bool Replace(BackgroundWorker worker, RegexTesterPageViewModel viewModel, RegexProcessContext context)
        {
            viewModel.AppendOutputText("string pattern = @\"" + StringFormat(context.MatchRegexExpression) + "\";");
            viewModel.AppendOutputText("RegexOptions regexOptions = " + GetRegexOptions(context.MatchRegexOptions) + ";");
            viewModel.AppendOutputText("Regex regex = new Regex(pattern, regexOptions);");
            viewModel.AppendOutputText("string inputData = @\"" + StringFormat(context.InputText) + "\";");
            viewModel.AppendOutputText("string replacement = @\"" + StringFormat(context.ReplaceRegexPattern) + "\";");
            viewModel.AppendOutputText("string result = regex.Replace(inputData, replacement);");

            return OperationIsComplete(worker, viewModel);
        }
        public bool Match(BackgroundWorker worker, RegexTesterPageViewModel viewModel, RegexProcessContext context)
        {
            viewModel.AppendOutputText("string pattern = @\"" + StringFormat(context.MatchRegex.ToString()) + "\";");
            viewModel.AppendOutputText("RegexOptions regexOptions = " + GetRegexOptions(context.MatchRegex.Options) + ";");
            viewModel.AppendOutputText("Regex regex = new Regex(pattern, regexOptions);");
            viewModel.AppendOutputText("string inputData = @\"" + StringFormat(context.InputText) + "\";");
            viewModel.AppendOutputText("foreach (Match match in regex.Matches(inputData))");
            viewModel.AppendOutputText("{");
            viewModel.AppendOutputText("\tif (match.Success)");
            viewModel.AppendOutputText("\t{");
            viewModel.AppendOutputText("\t\t//TODO processing results");
            viewModel.AppendOutputText("\t}");
            viewModel.AppendOutputText("}");

            return OperationIsComplete(worker, viewModel);
        }
        public bool Split(BackgroundWorker worker, RegexTesterPageViewModel viewModel, RegexProcessContext context)
        {
            if (!RegexIsMatch(context))
            {
                return OperationIsComplete(worker);
            }

            int count = 0;
            var matches = context.MatchRegex.Split(context.InputText);
            foreach (var str in matches)
            {
                if (worker.CancellationPending)
                    return false;

                if (!string.IsNullOrEmpty(str))
                {
                    viewModel.AppendOutputText(str);
                    count++;
                }
            }
            viewModel.Count = count;
            return OperationIsComplete(worker);
        }