正则表达式帮助角度过滤器需要突出显示来自html的匹配文本

时间:2015-03-25 10:26:38

标签: javascript html regex angularjs

我有这个有效,但正则表达式与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);
        };
    });

1 个答案:

答案 0 :(得分: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);
        };
    });