繁体   English   中英

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

[英]highlight words in html using regex in C#

我在stackoverflow上找到了这篇文章

使用正则表达式和JavaScript突出显示html中的单词-几乎存在

通过上面的文章,我试图使用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>

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

任何帮助将不胜感激。

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

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

  1. 将>字符,不在集合[<>]中的非贪婪捕获字符匹配并捕获到$ 1中
  2. 将关键字匹配并捕获到$ 2中
  3. 匹配并捕获到未设置为[<>]的$ 3个非贪心字符中,并加上<char

注意事项:

  1. 格式正确的HTML效果最好,如果此html是用户生成的内容(UGC),那么好运,您应该使用HTML解析器:)
  2. 这将突出显示<textarea>...</textarea>
  3. 这会突出显示<script>...</script>

请注意,您可以在左侧扩展捕获以捕获标签名称,并且有条件地不替换诸如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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM