作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想实现通配符搜索。现在写下我正在做的是:
var patt = new RegExp(input);
if(patt.test(searchString))
$scope.filteredModel.push(searchString);
但这不会给出通配符搜索结果。即,如果我输入 v*
,我应该得到所有以 v
开头的 字符串。但在这种情况下,因为我使用的是 regExp
,所以我得到了所有字符串(因为 v*
表示 0 次或更多 次 v
) 。我如何自定义它?
最佳答案
您获取用户输入并将其转换为等效的通配符。 *
应该变成 .*
你应该添加 ^
在开头只匹配以给定模式开头的事物:
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
结尾和可变数量的 C
就像ABCCCCCCC
.
关于javascript - 如何在angularjs中使用通配符搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31183733/
我是一名优秀的程序员,十分优秀!