2014-03-27 196 views
0

我想突出顯示結果中的搜索項。一般來說,它基於SO上的代碼here工作正常。我的問題是它用搜索詞替換子字符串,即在這個例子中,它將用「愛」(不可接受)代替「LOVE」。所以我想我可能想要找到子字符串開頭的索引,做一個INSERT開始的<範圍>標記,並在子字符串的末尾做相似處理。由於yafs可能相當長,我還認爲我需要將stringbuilder集成到此。這是可行的,還是有更好的方法?一如既往,預先感謝您的建議。插入搜索項子索引索引

string yafs = "Looking for LOVE in all the wrong places..."; 
string searchTerm = "love"; 

yafs = yafs.ReplaceInsensitive(searchTerm, "<span style='background-color: #FFFF00'>" 
+ searchTerm + "</span>"); 
+0

不是所有這些網站使用JavaScript來做到這一點在客戶端? –

+0

在你做替換之前你的字符串已經是HTML嗎?如果是這樣,小心簡單的替換。如果有人正在搜索「html」(或其他html標籤),您的完整網站將被打破。 –

+0

thanx的提示。在這種情況下,它是預先格式化的文本,不涉及html。 – Darkloki

回答

1
如何

一下:

public static string ReplaceInsensitive(string yafs, string searchTerm) { 
    return Regex.Replace(yafs, "(" + searchTerm + ")", "<span style='background-color: #FFFF00'>$1</span>", RegexOptions.IgnoreCase); 
} 

更新:

public static string ReplaceInsensitive(string yafs, string searchTerm) { 
    return Regex.Replace(yafs, 
     "(" + Regex.Escape(searchTerm) + ")", 
     "<span style='background-color: #FFFF00'>$1</span>", 
     RegexOptions.IgnoreCase); 
} 
+1

如果有人在搜索'。*',一切都消失了? –

+0

感謝所有人。其他選項可能會工作,但這看起來最簡單,迄今爲止它測試的很好。 – Darkloki

+0

哎呀,在這種情況下必須逃脫...對不起 –

1

請問你需要什麼:

static void Main(string[] args) 
{ 
    string yafs = "Looking for LOVE in all the wrong love places..."; 
    string searchTerm = "LOVE"; 

    Console.Write(ReplaceInsensitive(yafs, searchTerm)); 
    Console.Read(); 
} 

private static string ReplaceInsensitive(string yafs, string searchTerm) 
{ 
    StringBuilder sb = new StringBuilder(); 
    foreach (string word in yafs.Split(' ')) 
    { 
     string tempStr = word; 
     if (word.ToUpper() == searchTerm.ToUpper()) 
     { 
      tempStr = word.Insert(0, "<span style='background-color: #FFFF00'>"); 
      int len = tempStr.Length; 
      tempStr = tempStr.Insert(len, "</span>"); 
     } 

     sb.AppendFormat("{0} ", tempStr); 
    } 

    return sb.ToString(); 
} 

給出:

尋找<跨度風格= '背景色:#FFFF00' 在> LOVE </SPAN>所有錯<跨度風格= '背景色:#FFFF00'>愛</span>的地方......

+0

這隻會取代搜索詞的第一次出現。 –

+0

道歉,沒有意識到會有字符串中的單詞的多個實例。更新。 – DGibbs

0

檢查這個代碼

private static string ReplaceInsensitive(string text, string oldtext,string newtext) 
    { 
     int indexof = text.IndexOf(oldtext,0,StringComparison.InvariantCultureIgnoreCase); 
     while (indexof != -1) 
     { 
      text = text.Remove(indexof, oldtext.Length); 
      text = text.Insert(indexof, newtext); 


      indexof = text.IndexOf(oldtext, indexof + newtext.Length ,StringComparison.InvariantCultureIgnoreCase); 
     } 

     return text; 
    }