我有一个名为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("{0}", "$0"), RegexOptions.IgnoreCase);
}
catch {}
}
return s;
}
会是什么,以防止这种破坏的最佳方式?即使我只是简单地排除在锚标记(无论是网页还是电子邮件地址)还是图像标记内发生的任何匹配?
+0
你真的需要使用某种HTML解析器,检查每个元素的匹配。如果包含元素能够接受包含文本部分的样式,则应用它。 –
2011-05-24 15:16:42