Javascript 如何在angularjs中使用通配符搜索?
我想实现一个通配符搜索。现在写下我正在做的是:Javascript 如何在angularjs中使用通配符搜索?,javascript,regex,angularjs,filter,wildcard,Javascript,Regex,Angularjs,Filter,Wildcard,我想实现一个通配符搜索。现在写下我正在做的是: var patt = new RegExp(input); if(patt.test(searchString)) $scope.filteredModel.push(searchString); 但这不会给出通配符搜索结果。i、 e如果我输入v*,我应该得到所有以v开头的字符串。但在本例中,由于我使用的是regExp,因此我得到了所有字符串(因为v*表示出现了0次或更多次v)。我如何自定义它?如果您使用正则表达式,您可以尝试对不同的字
var patt = new RegExp(input);
if(patt.test(searchString))
$scope.filteredModel.push(searchString);
但这不会给出通配符搜索结果。i、 e如果我输入
v*
,我应该得到所有以v
开头的字符串。但在本例中,由于我使用的是regExp
,因此我得到了所有字符串(因为v*
表示出现了0次或更多次v
)。我如何自定义它?如果您使用正则表达式,您可以尝试对不同的字符使用速记版本
正则表达式的一些实现允许您对常用序列使用速记版本,它们是:
\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])
您获取用户输入并将其转换为此等效通配符<代码>*应变为
*
,您应在开头添加^
,以仅匹配从给定模式开始的内容:
var patt = new RegExp('^' + input.replace(/\*/g, '.*'));
现在,您可以使用patt
进行测试,并获得所需的结果
此外,您可能希望转义正则表达式中的其他特殊字符:
var specialCharacters = /([.\\+?[^\]$(){}=!<>|:-])/g;
var patt = new RegExp('^' + input.replace(specialCharacters, "\\$1").replace(/\*/g, '.*'));
var specialCharacters=/([.\\+?[^\]$(){}=!\124;::-])/g;
var patt=new RegExp(“^”+input.replace(特殊字符,\\$1”).replace(/\*/g,'.');
这可能看起来很吓人,但它所做的只是将
\
添加到以下任何一项前面:\+?[ ^ ] $ ( ) { } = ! < > | : -代码>。这样,如果用户输入v*ABC+
,它将尝试匹配以v
开始并以ABC+
结束的内容,而不是以ABC
和变量数量的C
结束,比如ABCCCCCCC再问一个问题。。如何将所有出现的*替换为。*我编辑了答案。将\g
(全局)添加到正则表达式可以实现这一点。