在C#中使用正则表达式突出显示html中的单词

时间:2014-05-19 19:31:06

标签: c# html regex replace

我在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>

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

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

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

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

  1. 匹配并捕获$ 1&gt; char,非贪婪的捕获字符不在集[&lt;&gt;]
  2. 将您的关键字匹配并捕获到$ 2
  3. 匹配并捕获不在集合[&lt;&gt;]中的$ 3非贪婪字符,加上&lt;炭
  4. 注意事项:

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

      请注意,您可以展开左侧的捕获以捕获标记名称,并有条件地不替换像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);