Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在angularjs中使用通配符搜索?_Javascript_Regex_Angularjs_Filter_Wildcard - Fatal编程技术网

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
(全局)添加到正则表达式可以实现这一点。