2015-03-25 59 views
0

我有這個工程,但正則表達式與html標籤匹配,有沒有什麼辦法可以讓它忽略html標籤。任何人都可以幫助我修改正則表達式,所以我的類只適用於文本和不匹配的HTML標籤?正則表達式幫助需要角度過濾器,其中突出顯示從html中匹配的文本

angular.module('my.filters') 
    .filter('highlight', function ($sce) { 
     return function (text, filterPhrase) { 
      if (filterPhrase) text = text.replace(new RegExp('(' + filterPhrase + ')', 'gi'), '<span class="quick-find-highlight">$1</span>'); 
      return $sce.trustAsHtml(text); 
     }; 
    }); 
+0

你可以顯示你的正則表達式(filterPhrase)嗎? – 2015-03-25 10:51:29

+0

它只是一個用戶輸入的文本字符串,其工作原理類似於瀏覽器中的Ctrl + f。 – 2015-03-25 10:53:31

回答

1

您可以嘗試下面的代碼,其中我按標記拆分並僅在字符串不是標記時進行替換。

angular.module('my.filters') 
    .filter('highlight', function($sce) { 
     return function(text, filterPhrase) { 
      if (filterPhrase) { 
       var tag_re = /(<\/?[^>]+>)/g; 
       var filter_re = new RegExp('(' + filterPhrase + ')', 'gi'); 
       text = text.split(tag_re).map(function(string) { 
        if (string.match(tag_re)) { 
         return string; 
        } else { 
         return string.replace(filter_re, 
               '<span class="quick-find-highlight">$1</span>'); 
        } 
       }).join(''); 
      } 
      return $sce.trustAsHtml(text); 
     }; 
    }); 
+0

感謝人絕對的傳奇,作品像一個魅力! – 2015-03-25 11:29:00