Perl CGI 应用程序正在提供搜索功能。应用程序将匹配的片段写入 HTML 页面。现在我想突出显示片段中的匹配项。我可以使用类似的东西
s/($searchregex)/<span class="highlight">$1<\/span>/gi
突出比赛。这适用于纯文本情况,但有时会因包含自身 HTML 标记的片段而中断,例如链接或带有引用的图像。在失败的情况下,上述替换是通过在 href 值中插入 span 标签来破坏 HTML 链接。
目前我看到了三种可能的解决方案:
编写一个不替换 html 标记内匹配项的正则表达式,例如在 <> 内。我不知道如何为这种情况编写替换正则表达式。是否有允许这种替换的 perl 正则表达式以及它的外观如何?
编写一个正则表达式来替换上述替换的所有错误替换。这将修复 href 中错误的 span 标签。
使用 Javascript 突出显示生成的 DOM 树中的匹配项。使用 jQuery 的可能方式在带有匹配文本的高亮 html中进行了概述。即使是普通的 Javascript 也可能足够JavaScript 的 Regular Expression Flavor了。也有特殊的 jQuery 插件用于高亮高亮正则表达式。我是 Javascript 的新手,因此也欢迎提供更多建议。
最好的解决方案是什么?最好的方法是 1. - 但这似乎是不可能的。所以剩下的问题是:在服务器端以丑陋的方式完成工作,或者在客户端引入 Javascript 以更简洁的方式解决问题。