2016-04-13 11 views
0

In Umbraco habe ich ein Feld (supportListItemWordMarking) gemacht, um einen csv von Wörtern einzugeben, die der Benutzer in einer Kopfzeile markiert haben soll, zB.x.Wort in CSV suchen und durch Tag ersetzen

This is a very fine header 

und der Benutzer möchte mit roten very und header hervorgehoben haben

Das Feld in umbraco wird dann wie folgt aussehen:

sehr, Kopf

Ich versuche, eine machen Rasierskript, so dass es in der Kopfzeile nach Wörtern sucht, die in das Feld supportListItemWordMarking eingegeben werden, und dann etwas wie folgt ausgeben:

Ich habe mit diesem kommen:

@{ 
    if(subItem.HasValue("supportListItemWordMarking")) { 
     string[] wordMarking = subItem.GetValue("supportListItemWordMarking").ToString().Split(',');           
     } 
    } 

Aber ich bin nicht sicher, ob dies der richtige Ansatz ist, so bin ich fest.

Antwort

1

Dies ist wahrscheinlich, wie ich es tun würde:

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; 
}); 

Wenn die Liste wordMarking viele Elemente hat, dann sollten Sie einen Wörterbuch verwenden, um Leistung zu verbessern.

+0

Danke! Funktioniert gut! –