如何在angularjs中使用通配符搜索?

时间:2015-07-02 11:44:20

标签: javascript regex angularjs filter wildcard

我想实现通配符搜索。现在写下我正在做的是:

var patt = new RegExp(input); 
if(patt.test(searchString))
    $scope.filteredModel.push(searchString);

但是这不会给出通配符搜索结果。即如果我输入v*,我应该使用v获取开始的所有字符串。但在这种情况下,当我使用regExp时,我会收到所有字符串(因为v*表示 0或更多出现v)。我该如何定制?

2 个答案:

答案 0 :(得分:2)

您获取用户输入并将其转换为此通配符等效项。 *应该变为.*,您应该在开头添加^,以便仅匹配以给定模式开头的内容:

var patt = new RegExp('^' + input.replace(/\*/g, '.*'));

现在您可以使用patt进行测试并获得所需的结果。

此外,您可能想要转义正则表达式中的其他特殊字符:

var specialCharacters = /([.\\+?[^\]$(){}=!<>|:-])/g;
var patt = new RegExp('^' + input.replace(specialCharacters, "\\$1").replace(/\*/g, '.*'));

这可能看起来很可怕,但它所做的只是在前面添加\. \ + ? [ ^ ] $ ( ) { } = ! < > | : -。这样,如果用户输入v*ABC+,它将尝试匹配以v开头并以ABC+结尾的内容,而不是以ABC和{{1}的可变数字结尾像C一样。

答案 1 :(得分:0)

如果您正在使用正则表达式,也许您可​​以尝试使用不同字符的短手版本。

  

正则表达式的某些实现允许您使用常用序列的简写版本,它们是:

     

\ d,一个数字([0-9])

     

\ D,非数字([^ 0-9])

     

\ w,一个单词(字母数字)([a-zA-Z0-9])

     

\ W,非单词([^ a-zA-Z0-9])

     

\ s,一个空格([\ t \ n \ r \ n \ f])

     

\ S,非空格([^ \ t \ n \ r \ n \ f])

Source