2016-07-25 11 views
2

私は、AngularJSの文字列内の任意の量の単語をハイライトする関数を持っています。私はこれを変更して、代わりに配列に入力した単語をハイライトするようにしたいが、RegExpの単語をどうやって書くのか分からない。ここでは、現在の正規表現は次のようになります。RegExを使用して文字列のリストに一致させる

$scope.highlight = function(haystack) { 
    return $sce.trustAsHtml(haystack.replace(new RegExp(needle, "gi"), function(match) { 
     return '<span class="highlightWord">' + match + '</span>'; 
    })); 
}; 

現在の「針」変数は、 "猫のように、単なる文字列ですが、私はそれがそうで['cats', 'registered', 'dog']とを含んでいるので、それを変更したいです。

答えて

4

join()メソッドを使用して、配列要素を正規表現のOR演算子である|パイプで結合します。

また、$&を使用すると、一致する文字列を取得し、置換文字列で使用できます。

$scope.highlight = function (haystack) { 
    return $sce.trustAsHtml(haystack.replace(new RegExp(needle.join('|'), "gi"), '<span class="highlightWord">$&</span>')); 
}; 

var arr = ['cat', 'dog', 'elephant']; 
 
var str = 'Cat fears dog and dog fears elephant'; 
 

 
document.body.innerHTML = str.replace(new RegExp(arr.join('|'), 'gi'), '<span class="highlightWord">$&</span>');
.highlightWord { 
 
    background: yellow; 
 
}

ワード境界\bを使用し、正確な言葉を一致させます。

str.replace(new RegExp('\\b(' + arr.join('|') + ')\\b', 'gi'), '<span class="highlightWord">$1</span>') 
関連する問題