获取正则表达式匹配的源术语

时间:2015-01-09 19:33:25

标签: regex angularjs

我正在创造一个"荧光笔"在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;,这是不正确的。

1 个答案:

答案 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