如何使用正则表达式突出显示搜索的单词

时间:2011-05-07 10:35:08

标签: regex grails groovy

您好 我正在研究一个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]

任何人都可以帮我使用正则表达式,只能选择链接或其他标签中未包含的单词。

由于

1 个答案:

答案 0 :(得分:2)

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

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

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