2011-05-07 53 views
0

嗨 我在常規應用程序的工作,需要我強調(添加跨距)到搜索for.For實例給出下面的文本字的話:如何突出搜索使用正則表達式

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] 

誰能幫我用正則表達式,只能選擇那些不包含在鏈接或其它標記詞。

感謝

回答

2

一個維護的解決方案是不太可能實現的使用正則表達式 - 這個問題太複雜。

將您的HTML解析爲DOM,並且僅將文本節點視爲適合潛在突出顯示。根據定義,文本節點將只是呈現的內容片段,不會是元素名稱,屬性/屬性值等。

然後將問題的複雜性降低爲:如何查找並突出顯示另一個字符串中的字符串?