Javascript 突出显示数组中的单词
我想在数组中标记我的单词Javascript 突出显示数组中的单词,javascript,angularjs,arrays,Javascript,Angularjs,Arrays,我想在数组中标记我的单词 $scope.arrayFilter=["mom","is","beautifull"]; 但这只适用于我,如果我有这些词的出现顺序。我希望,无论单词的顺序如何,如果匹配,都要标记这些单词。如果我在数组中添加一个新词,它也应该被标记 $scope.arrayFilter=[“mom”、“is”、“beautifull”]; $scope.data=[{ 标题:“妈妈很漂亮” }, { 标题:“我妈妈很棒” }, { 标题:“我讨厌数学” }]; }); 应用过滤
$scope.arrayFilter=["mom","is","beautifull"];
但这只适用于我,如果我有这些词的出现顺序。我希望,无论单词的顺序如何,如果匹配,都要标记这些单词。如果我在数组中添加一个新词,它也应该被标记
$scope.arrayFilter=[“mom”、“is”、“beautifull”];
$scope.data=[{
标题:“妈妈很漂亮”
}, {
标题:“我妈妈很棒”
}, {
标题:“我讨厌数学”
}];
});
应用过滤器('突出显示',功能($sce){
返回函数(文本、数组过滤器){
var stringToDisplay='';
角度.forEach(数组过滤器,函数(键,值){
if(文本包括(键)){
stringToDisplay=stringToDisplay.concat(键).concat(“”);
}
})
stringToDisplay=stringToDisplay.substring(0,stringToDisplay.length-1);
返回$sce.trustAsHtml(text.replace(新的RegExp(stringToDisplay,'gi'),'$&'));
}
});
这是一个工作的过滤器:
app.filter('highlight', function($sce) {
return function(text, arrayFilter) {
var stringToDisplay = '';
angular.forEach(arrayFilter,function(key,value){
if(text.includes(key)){
text = text.replace(new RegExp(key, 'gi'), '<span class="highlightedText">$&</span>');
}
})
return $sce.trustAsHtml(text);
}
});
app.filter('highlight',函数($sce){
返回函数(文本、数组过滤器){
var stringToDisplay='';
角度.forEach(数组过滤器,函数(键,值){
if(文本包括(键)){
text=text.replace(新的RegExp(键'gi'),'$&');
}
})
返回$sce.trustAsHtml(文本);
}
});
问题在于您正在浓缩密钥-将您的过滤器更改为:
app.filter('highlight', function($sce) {
return function(text, arrayFilter) {
angular.forEach(arrayFilter, function(key, value) {
if (text.includes(key)) {
text = text.replace(new RegExp(key, 'gi'), '<span class="highlightedText">$&</span>')
}
})
return $sce.trustAsHtml(text);
}
});
.highlightedText{
背景:黄色;
}
如果您还想突出显示单词之间的空格,这里有一个过滤器版本:
app.filter('highlight',函数($sce){
返回函数(文本、数组过滤器){
var regex=“([\\s]*”+arrayFilter.join([\\s]*)|([\\s]*”+“[\\s]*)”)”;
返回$sce.trustAsHtml(text.replace(newregexp(regex,'gi'),'$&'));
}
});代码>你能帮我做这个吗?
app.filter('highlight', function($sce) {
return function(text, arrayFilter) {
angular.forEach(arrayFilter, function(key, value) {
if (text.includes(key)) {
text = text.replace(new RegExp(key, 'gi'), '<span class="highlightedText">$&</span>')
}
})
return $sce.trustAsHtml(text);
}
});