您好 我正在研究一个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]
任何人都可以帮我使用正则表达式,只能选择链接或其他标签中未包含的单词。
由于
答案 0 :(得分:2)
使用正则表达式不太可能实现可维护的解决方案 - 问题太复杂了。
将HTML解析为DOM,并且只考虑文本节点适合潜在的突出显示。根据定义,文本节点将只是那些被渲染的内容,而不是元素名称,属性/属性值等。
然后问题的复杂性降低到:如何查找并突出显示另一个字符串中的字符串?