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

how to use Wildcard search in angularjs?

本文关键字:通配符 搜索 angularjs      更新时间:2023-09-26

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

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

但这并没有给出通配符搜索结果。即,如果我输入v*,我应该得到以v开始的所有字符串。但在这种情况下,当我使用regExp时,我将获得所有字符串(因为v*意味着v0次或更多次)。如何自定义?

您接受用户输入并将其转换为等效的通配符。*应该变成.*,并且应该在开头添加^,以便只匹配以给定模式开始的内容:

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

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

此外,您可能希望转义regex中的其他特殊字符:

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

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

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

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

''d、 一位数字([0-9])

''D、 非数字([^0-9])

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

''W、 非单词([^a-zA-Z0-9])

''s、 空白([''t''n''r''f])

''S、 非空白([^''t''n''r''f])