javascript - 突出显示与 Perl 正则表达式匹配的 HTML 部分 - 在服务器端 Perl 或客户端 javascript 中执行吗?

标签 javascript html regex perl web-applications

Perl CGI 应用程序提供搜索功能。应用程序将匹配的片段写入 HTML 页面。现在我想突出显示片段内的匹配项。我可以使用类似的东西

s/($searchregex)/<span class="highlight">$1<\/span>/gi

突出显示匹配项。这对于纯文本的情况工作得很好,但有时会因为包含自身 HTML 标签的片段而中断,例如获取带有引用的链接或图像。在失败的情况下,上述替换会通过在 href 值内插入 span 标记来破坏 HTML 链接。

目前我看到三种可能的解决方案:

  1. 编写一个不替换 html 标记内的匹配项的正则表达式,例如里面<>。我不知道如何为这种情况编写替换正则表达式。是否有 Perl 正则表达式允许这种替换,它是什么样子的?

  2. 编写一个正则表达式来替换上述替换的所有错误替换。这将修复 href 内错误的 span 标签。

  3. 使用 Javascript 突出显示生成的 DOM 树中的匹配项。 highlight html with matching text 中概述了使用 jQuery 的可能方法。 。即使是普通的 Javascript 也可能足够了 JavaScript’s Regular Expression Flavor 。有特殊的 jQuery 插件用于突出显示 highlight regular expressions , 也。我是 Javascript 新手,因此也欢迎您提供更多建议。

更好的解决方案是什么?最好的方法是 1. - 但这似乎不可能。所以剩下的问题是:在服务器端以丑陋的方式完成工作,或者在客户端引入 Javascript 以更干净的方式解决问题。

最佳答案

在 Perl 中,具有先行后模式

s/($searchregex)(?=[^>]*<)/<span class="highlight">$1<\/span>/gi

或更短

s/$searchregex(?=[^>]*<)/<span class="highlight">$&<\/span>/gi

但也许您需要读取字符串中的整个文件或将输入记录分隔符 ($/) 更改为“<”,因为如果正则表达式后跟除“>”之外的任何字符的序列,则正则表达式与模式匹配和 '<' 因为不会匹配 if ($/="\n"并且模式和下一个 '<' 之间有一个换行符。

关于javascript - 突出显示与 Perl 正则表达式匹配的 HTML 部分 - 在服务器端 Perl 或客户端 javascript 中执行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11846711/

相关文章:

javascript - 突出显示节点及其邻居不与另一个不透明度过滤器同步工作

javascript - 如何使用对象创建原型(prototype)?

javascript regex - 为什么我捕获的字符串是错误的?

regex - 使用 egrep 和正则表达式搜索数字

javascript - 围绕传单 map 中的点旋转多边形

javascript - 使用表单选择菜单在 HTML 中显示条件字段

javascript - 在 html 中引用 jquery 全局变量?

html - 如何调整悬停图像上的 CSS 列表

c# - 为什么输入字符串 "**$&"上的替换模式 "$1.30"返回一个前面有 "**"且输入字符串为 "after"的字符串?

javascript - 检测无效的 XML 字符 (javascript)