我正在创造一个"荧光笔"在AngularJS中过滤以突出显示结果表中的搜索词。例如,用户搜索" Foo"并取回一堆结果。我们的结果不区分大小写,因此大多数结果可能会以" foo"在里面。我创建了一个正则表达式对象来捕获任何" foo"不区分大小写,如下所示:
app.filter('highlighter', function(){
return function(input, term){
input = input || '';
if(!term || term === ''){
return input;
}
var re = new RegExp(term,"i")
input = input.replace(re, '<strong>'+re.source+'</strong>');
return input;
}
});
唯一的问题是,然后我运行我的替换,它用&#34; Foo&#34;取代所有&#34; foo&#34; s在搜索结果中,但我想用&#34; foo&#34;替换它。基本上我想访问input
中匹配的术语。如果input
是&#34; /Documents/foobar/test.docx"然后搜索&#34; Foo&#34;应该导致input
成为&#34; / Documents / foo bar / test.docx&#34;。现在,它正在使用实际的术语,因此它返回&#34; / Documents / Foo bar / test.docx&#34;,这是不正确的。
答案 0 :(得分:0)
这就是你想要的吗?
function(input, term) {
input = input || '';
if (typeof term === 'undefined' || !term || !input) { return input; }
input = input.replace(new RegExp('('+term+')','ig'),'<strong>$1</strong>');
return input;
}
g
标志匹配多个匹配项。
测试用例:
var term='xxx';console.log('aaaXxXbBbxXxccc'.replace(new RegExp('('+term+')','ig'),'<strong>$1</strong>'));
的产率:
aaa<strong>XxX</strong>bBb<strong>xXx</strong>ccc