突出显示与perl正则表达式匹配的HTML部分 - 在服务器端perl或客户端javascript中执行此操作
Highlighting HTML parts matching a perl regex - do it in server side perl or client side javascript?
一个Perl CGI应用程序提供了一个搜索功能。应用程序将匹配的代码段写入 HTML 页面。现在我想突出显示片段中的匹配项。我可以使用类似的东西
s/($searchregex)/<span class="highlight">$1<'/span>/gi
以突出显示匹配项。这适用于仅文本的情况,但有时会中断包含自身 HTML 标签的代码片段,例如用于带有引用的链接或图像。在失败的情况下,上述替换通过在 href 值内插入 span 标记来破坏 HTML 链接。
目前,我看到了三种可能的解决方案:
编写一个不替换 html 标记内部(例如<>内部)匹配项的正则表达式。我不知道如何为这种情况编写替换正则表达式。是否有一个perl正则表达式允许这种替换,它看起来像什么?
编写一个正则表达式来替换上述替换的所有错误替换。这将修复 href 内错误的跨度标记。
使用 Javascript 突出显示生成的 DOM 树中的匹配项。使用 jQuery 的可能方法在突出显示 html 中概述,并带有匹配的文本。即使是普通的Javascript也可能足够JavaScript的正则表达式风格。也有特殊的jQuery插件用于突出显示突出显示正则表达式。我是Javascript的新手,所以也非常感谢更多的建议。
更可取的解决方案是什么?最好的方法是将其作为 1。- 但这似乎是不可能的。所以剩下的问题是:在服务器端以丑陋的方式做工作,或者引入Javascript在客户端以更干净的方式解决问题。
在 perl 中具有前瞻模式
s/($searchregex)(?=[^>]*<)/<span class="highlight">$1<'/span>/gi
或更短
s/$searchregex(?=[^>]*<)/<span class="highlight">$&<'/span>/gi
但也许您需要读取字符串中的整个文件或将输入记录分隔符 ($/) 更改为"<",因为如果正则表达式后跟除">"和"<"之外的任何字符序列,则正则表达式与模式匹配,因为如果 ($/="'" 不匹配,并且模式和下一个"<"之间有一个换行符。
您可以在服务器端使用HTML解析器,这是您正在执行的工作的正确工具。
或者你可以像你说的那样使用 javascript 来做到这一点,我更喜欢我自己,因为它更通用,并且可能导致更多的交互性,尽管你可能会面临与你现在面临的类似的问题(只是你已经把它移到了客户端)。
这实际上是一个比最初出现更复杂的问题。没有更多信息,就不可能尝试提出更好的解决方案。
一个好的解决方案是遍历 DOM 树并匹配每个文本节点,但是您会遇到一个问题,即您不会匹配跨多个文本节点的文本 - 例如,"John the Con Johnson"不会匹配搜索"John the Con",因为它们位于单独的节点中。这对您来说可能是也可能不是问题,具体取决于您的用例。
- 客户端服务器REST API captcha实现
- 使用谷歌应用程序脚本将服务器端数据表返回到客户端
- 如何使用Socket.io将命令从客户端发送到服务器
- 如何轻松地将服务器端变量从Java代码转移到客户端代码
- Meteor方法在客户端返回null,在客户端运行的相同方法返回正确的值
- 从客户端获取修改后的对象,并将其与服务器上的原始对象组合
- 如何将我的javascript库公开给其他客户端使用
- 是否可以使用JavaScript/AAJAX在客户端创建一个文件
- 如何使用Javascript客户端对象模型检索Sharepoint 2010列表项权限
- 返回/从Twit's客户端.get
- 将客户端特定的日期格式返回到服务器MVC4
- MobileFirst:在客户端运行计时器作业-最佳选项
- 标签客户端的设置值
- 我的客户端选项是什么
- Node.js上的WebSocket,并在所有连接的客户端之间共享消息
- 使用javascript在客户端上使用Web服务
- 通过ajax从客户端调用C#方法来执行C#方法
- 突出显示与perl正则表达式匹配的HTML部分 - 在服务器端perl或客户端javascript中执行此操作
- 将简单的Perl脚本翻译成Python,向客户端发送响应
- 当使用json从perl/cgi向客户端发送包括换行符在内的字符串时,脚本将停止