0

jQuery テンプレート タグを見つけるための C# 正規表現を探しています。ユーザーが独自の文字をデザインできるエディターがあり、それらのタグを実際の値に置き換える必要があります。

次に例を示します。

Welcome {{Name}} to our webshop. Your last visited our website on {{LastVisit}}

サーバー上で、投稿されたコンテンツでこれらのタグを検索したいと思います。次のようなものです。

[HttpPost]
public ActionResult Create(Report report)
{
    Dictionary<string,string> tags = new Dictionary<string,string>();
    var matches = Regex.Matches(report.Content, @"\{{2}(?'tagname'[^{}]+)\}{2}"); 
    foreach(Match match in matches){
      tags.add(match.Value, match.Groups[1].Value);
    }
    return View();
}

私の正規表現はこれを返すはずです:

  • 名前
  • 最後の訪問

あなたが私を助けてくれることを願っています!

4

6 に答える 6

3

これはトリックを行います:

string text = @"Welcome {{Name}} to our webshop. Your last visited our website on {{LastVisit}}";
IList<string> results = new List<string>();
MatchCollection matchCollection = Regex.Matches(text, @"\{\{([\w]*)\}\}");
foreach (Match match in matchCollection)
{
    results.Add(match.Groups[1].ToString());
}
于 2012-08-17T09:07:27.800 に答える
1

このようなものは仕事をします。次に、ディクショナリに必要な値を入力するだけで、置換が面倒な作業を処理してくれます。

var replaces=new Dictionary<string,string> { {"Name","Bob"} , {"LastVisit","2012-01-01"}};
var regex=new Regex(@"\{\{(?<field>.*?)\}\}");

var report="Welcome {{Name}} to our webshop. Your last visited our website on {{LastVisit}}";
var result=regex.Replace(report,delegate(Match match) {
     return replaces.ContainsKey(match.Groups["field"].Value) ? replaces[match.Groups["field"].Value] : match.Value;
  });
于 2012-08-17T09:26:48.013 に答える
1
var text = 'Welcome {{Name}} to our webshop. Your last visited our website on {{LastVisit}}';
text = text.replace('\{\{Name\}\}', theName).replace('\{\{LastVisit\}\}', theLastVisit);

例: http://jsfiddle.net/Grimdotdotdot/zcsp5/1/

于 2012-08-17T08:37:26.440 に答える
1

私はこの正規表現を使用します:

@"\{{2}(?'tagname'[^{}]+)\}{2}"

名前付きグループ「tagname」のタグ名を抽出します。Regex.Matches()メソッドを使用して、送信した文字列内のすべての一致を取得します。

于 2012-08-17T08:54:35.790 に答える
1

これを試すことができます:

        string input = @"Welcome {{Name}} to our webshop. 
                         Your last visited our website on {{LastVisit}}";

        int startIndex = input.IndexOf("{{") + 2;
        int length = input.IndexOf("}}") - startIndex;
        var name = input.Substring(startIndex, length);

        startIndex = input.LastIndexOf("{{") + 2;
        length = input.LastIndexOf("}}") - startIndex;
        var lastVisit = input.Substring(startIndex, length);

この例は文字列メソッドを使用して解析できるように見えるため、このサンプルでは正規表現を使用していません。このメソッドは常に 2 つの括弧で囲まれたパラメーターを想定しています。

于 2012-08-17T08:55:40.173 に答える
1

私は以下を使用します:\{{2}(\w+)\}{2}

次のように使用します。

Regex regex = new Regex(@"\{{2}(\w+)\}{2}", RegexOptions.Singleline);
Match match = regex.Match(targetString);
while (match.Success) {
    for (int i = 1; i < match.Groups.Count; i++) {
        Group group = match.Groups[i];
        if (group.Success) {
            string templateItemValue = group.Value;
        } 
    }
    match = match.NextMatch();
}

お役に立てれば

于 2012-08-17T09:19:54.113 に答える