gpt4 book ai didi

javascript - Angular 中的正则表达式通配符

转载 作者:行者123 更新时间:2023-12-03 05:18:39 25 4
gpt4 key购买 nike

http://jsfiddle.net/f4Zkm/213/

HTML

<div ng-app>
<div ng-controller="MyController">
<input type="search" ng-model="search" placeholder="Search...">
<ul>
<li ng-repeat="name in names | filter:filterBySearch">
{{ name }}
</li>
</ul>
</div>
</div>

app.js

function escapeRegExp(string){
return string.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
}
function MyController($scope) {
$scope.names = [
'Lolita Dipietro',
'Annice Guernsey',
'Gerri Rall',
'Ginette Pinales',
'Lon Rondon',
'Jennine Marcos',
'Roxann Hooser',
'Brendon Loth',
'Ilda Bogdan',
'Jani Fan',
'Grace Soller',
'Everette Costantino',
'Andy Hume',
'Omar Davie',
'Jerrica Hillery',
'Charline Cogar',
'Melda Diorio',
'Rita Abbott',
'Setsuko Minger',
'Aretha Paige'];

$scope.search = '';
var regex;
$scope.$watch('search', function (value) {
regex = new RegExp('\\b' + escapeRegExp(value), 'i');
});

$scope.filterBySearch = function(name) {
if (!$scope.search) return true;
return regex.test(name);
};
}

从上面的示例中,我一直尝试使用特殊字符“*”创建通配符正则表达式搜索,但我无法循环遍历数组。

当前输出:如果输入是di,则显示所有相关匹配。

必需:我想要得到的是,如果输入是 di*/*(任何输入),它应该根据给定输入显示所有匹配项。

最佳答案

您的方法存在一些问题。首先,您在转义例程中对 * 进行转义,因此客户端无法使用它。

其次,您没有锚定您的线路,因此匹配可以发生在任何地方。

要修复此问题,请从转义函数中删除星号:

function escapeRegExp(string){
return string.replace(/([.+?^=!:${}()|\[\]\/\\])/g, "\\$1");
}

然后在您的 watch 功能中将 * 替换为 .* 并添加行 anchor :

$scope.$watch('search', function (value) {
var escaped = escapeRegExp(value);
var formatted = escaped.replace('*', '.*')

if(formatted.indexOf('*') === -1){
formatted = '.*' + formatted + '.*'
}

regex = new RegExp('^' + formatted + '$', 'im');
});

Here is a fiddle

关于javascript - Angular 中的正则表达式通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41494410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com