我有一個名爲HighlightKeywords的助手方法,我在查看搜索結果時使用論壇,突出顯示用戶搜索的帖子中的關鍵字。RegEx.Replace但在html標籤中排除匹配?
我遇到的問題是,例如,用戶搜索關鍵字'hotmail',其中HighlightKeywords方法然後找到該關鍵字的匹配項,並用指定要應用的樣式的span標籤包裝它,它會查找匹配項在html定位標記中,在某些情況下還有圖像標記。因此,當我將突出顯示的帖子渲染到屏幕上時,html標籤被破壞(由於跨度被插入其中)。
這裏是我的功能:
public static string HighlightKeywords(this string s, string keywords, string cssClassName)
{
if (s == string.Empty || keywords == string.Empty)
{
return s;
}
string[] sKeywords = keywords.Split(' ');
foreach (string sKeyword in sKeywords)
{
try
{
s = Regex.Replace(s, @"\b" + sKeyword + @"\b", string.Format("<span class=\"" + cssClassName + "\">{0}</span>", "$0"), RegexOptions.IgnoreCase);
}
catch {}
}
return s;
}
會是什麼,以防止這種破壞的最佳方式?即使我只是簡單地排除在錨標記(無論是網頁還是電子郵件地址)還是圖像標記內發生的任何匹配?
你真的需要使用某種HTML解析器,檢查每個元素的匹配。如果包含元素能夠接受包含文本部分的樣式,則應用它。 – 2011-05-24 15:16:42