在 CSV 中搜索单词并替换为标签
Search word in CSV and replace with tag
在 Umbraco 中,我创建了一个字段 (supportListItemWordMarking) 来输入用户希望在 header、f.x 中突出显示的单词的 csv。
This is a very fine header
并且用户希望 very
和 header
以红色突出显示
umbraco 中的字段将如下所示:
非常,header
我正在尝试制作一个剃须刀脚本,以便它会在 header 中查找在 supportListItemWordMarking
字段中输入的单词,然后输出如下内容:
<h1>This is a <span class="red">very</span> fine <span class="red">header</span></h1>
我想到了这个:
@{
if(subItem.HasValue("supportListItemWordMarking")) {
string[] wordMarking = subItem.GetValue("supportListItemWordMarking").ToString().Split(',');
}
}
但我不确定这是否是正确的方法,所以我被卡住了。
我可能会这样做:
var txt = "This is a very fine header";
var wordMarking = new string[] { "very", "header" };
// search for all words using regex
var rx = new Regex(@"(\w+)", RegexOptions.Compiled);
// the text to replace all regex matches with
// any words found will be inserted into {0} using string.Format
var replacementText = "<span class=\"red\">{0}</span>";
var newTxt = rx.Replace(txt, (match) =>
{
var wordFound = match.Groups[1].Value;
// check if word should be marked
if (wordMarking.Contains(wordFound))
{
// return the new word with the replacement
return string.Format(replacementText, wordFound);
}
return wordFound;
});
如果列表 wordMarking
有很多项,那么您应该使用字典来提高性能。
在 Umbraco 中,我创建了一个字段 (supportListItemWordMarking) 来输入用户希望在 header、f.x 中突出显示的单词的 csv。
This is a very fine header
并且用户希望 very
和 header
以红色突出显示
umbraco 中的字段将如下所示:
非常,header
我正在尝试制作一个剃须刀脚本,以便它会在 header 中查找在 supportListItemWordMarking
字段中输入的单词,然后输出如下内容:
<h1>This is a <span class="red">very</span> fine <span class="red">header</span></h1>
我想到了这个:
@{
if(subItem.HasValue("supportListItemWordMarking")) {
string[] wordMarking = subItem.GetValue("supportListItemWordMarking").ToString().Split(',');
}
}
但我不确定这是否是正确的方法,所以我被卡住了。
我可能会这样做:
var txt = "This is a very fine header";
var wordMarking = new string[] { "very", "header" };
// search for all words using regex
var rx = new Regex(@"(\w+)", RegexOptions.Compiled);
// the text to replace all regex matches with
// any words found will be inserted into {0} using string.Format
var replacementText = "<span class=\"red\">{0}</span>";
var newTxt = rx.Replace(txt, (match) =>
{
var wordFound = match.Groups[1].Value;
// check if word should be marked
if (wordMarking.Contains(wordFound))
{
// return the new word with the replacement
return string.Format(replacementText, wordFound);
}
return wordFound;
});
如果列表 wordMarking
有很多项,那么您应该使用字典来提高性能。