【问题标题】:How to highlight searched for words using a regular expression如何使用正则表达式突出显示搜索的单词
【发布时间】:2011-08-20 16:49:18
【问题描述】:

嗨 我正在开发一个 groovy 应用程序,该应用程序需要我突出显示(添加跨度)到要搜索的单词。例如给定以下文本:

youtube

[href="youtube.com] i am here , in Youtube[/a]

我想搜索“youtube”这个词,当它返回时,上面的文本应该是这样的:

[span]youtube[span]

[href="youtube.com] i am here , in [span]Youtube[/span]  [/a]

必须忽略 href 或 iframe 中包含的 youtube 字词。 目前我有以下代码:

def m = test =~ /([^<]*)?(youtube)/
println m[0]

def highLightText  = { attrs, body ->
        def postBody = attrs.text
        def m = postBody =~ /(?i:${attrs.searchTerm})/
        def array = []

        m.each{
            array << it as String
        }
        array.unique()

        String result = postBody
        array.each{
            result = result.replaceAll("${it}", "<span class='highlight'>${it}</span>")

        }

        out << result
    }

然后它返回:

[span]youtube[span]

[href="[span]youtube[span].com] i am here , in [span]Youtube[/span]  [/a]

谁能帮我一个正则表达式,它只能选择不包含在链接或其他标签中的单词。

谢谢

【问题讨论】:

    标签: regex grails groovy


    【解决方案1】:

    使用正则表达式不太可能实现可维护的解决方案 - 问题太复杂了。

    将您的 HTML 解析为 DOM,并仅考虑文本节点适合潜在的突出显示。根据定义,文本节点将只是那些被渲染的内容,而不是元素名称、属性/属性值等。

    然后您的问题的复杂性降低为:如何在另一个字符串中找到并突出显示一个字符串?

    【讨论】:

      猜你喜欢
      • 2012-02-17
      • 2012-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-01
      • 2020-09-16
      • 2021-01-24
      • 2013-06-16
      相关资源
      最近更新 更多