0

我正在寻找 C# 正则表达式来查找 jQuery 模板标签。我们有一个编辑器,人们可以在其中设计自己的字母,我需要用实际值替换这些标签。

这是一个例子:

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 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}"

提取命名组“标记名”中的标记名。使用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);

此示例不使用正则表达式,因为似乎可以使用字符串方法解析此示例。此方法始终需要两个括号中的参数。

于 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 回答
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 回答