【问题标题】:highlight words in html using regex in C#在 C# 中使用正则表达式突出显示 html 中的单词
【发布时间】:2014-05-19 19:31:06
【问题描述】:

我在stackoverflow上找到了这篇文章

highlight words in html using regex & javascript - almost there

使用上面的文章,我正在尝试使用 c# 突出显示服务器上的 HTML 文本。代码如下:

string replacePattern = "$1<span style=\"background-color:yellow\">$2</span>";
string searchPattern = String.Format("(?<=^|>)(.*?)({0})(?=.*?<|$)", searchString.Trim());
content = Regex.Replace(content, searchPattern, replacePattern, RegexOptions.IgnoreCase);

代码似乎运行良好,除非尝试突出显示图像源中包含的单词:

搜索关键字:

ABC

搜索文字:

<div><img src="/site/folder/ABC.PNG" /><br />ABC</div>

结果将突出显示文本和图像名称。

任何帮助将不胜感激。

【问题讨论】:

  • Obligatory link。使用像 HTMLAgilityPack 这样的 DOM 解析器。
  • @Sam 我只想突出显示 HTML 中的文本。你不认为解析是一种矫枉过正吗?
  • 不,你怎么知道你需要在 HTML 中走多远才能突出显示图像和标题。您应该如何确保不要在块 div 周围放置内联 span。 HTML 不是一种常规语言,不规则的事情最终发生。让它更健壮并解析它。但是,根据您呈现模板的方式,也许您可​​以在呈现 HTML 时突出显示......而不是事后。

标签: c# html regex replace


【解决方案1】:

我将提供一个解决方案,但我同意仅使用 Regex 来解析 HTML 最终是不值得的。也就是说,您比我们其他人更了解您的问题空间,因此,如果您突出显示的 HTML 在您的控制之下,您可能能够测试足够多的域,以使用正则表达式实现您想要的。

我的解决方案更改了您提供的正则表达式以采用这种方法:

  1. 匹配并捕获 $1 中的 > 字符,非贪婪捕获字符不在集合中 []
  2. 匹配关键字并将其捕获到 $2 中
  3. 匹配并捕获到不在集合 [] 中的 $3 非贪婪字符,加上

注意事项:

  1. 格式良好的 HTML 效果最好,如果这个 html 是用户生成的内容 (UGC),那么,祝你好运,你应该使用 HTML 解析器 :)
  2. 这将突出显示&lt;textarea&gt;...&lt;/textarea&gt; 中的内容
  3. 这将突出显示&lt;script&gt;...&lt;/script&gt; 中的内容

请注意,您可以在左侧展开捕获以捕获标签名称,并且有条件地不替换一组标签,如 textarea 和 script。

string searchString = "ABC";
string content = "<div><img src='/site/folder/ABC.PNG' /><br />ABC</div>";
string replacePattern = "$1<span style=\"background-color:yellow\">$2</span>$3";
string searchPattern = String.Format("(>[^<>]*?)({0})([^<>]*?<)", searchString.Trim());
content = Regex.Replace(content, searchPattern, replacePattern, RegexOptions.IgnoreCase);
Console.WriteLine(content);

【讨论】:

  • 这是一个很好的解决方案...谢谢!我的 HTML 中没有 script 标签和 textarea 标签,所以我不必担心。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-16
  • 2012-02-17
  • 1970-01-01
  • 2020-09-16
  • 2011-08-20
  • 2019-10-31
相关资源
最近更新 更多