Я пытаюсь отфильтровать список значений с помощью подстановочных знаков.
searchString = "ab*cd"
Должен возвращать все значения, которые начинаются с «ab» и заканчиваются «cd».
До сих пор я пытался разбить строку на несколько подстрок, где стоит звездочка, а затем искать все слова, которые начинаются с первой подстроки и одновременно заканчиваются второй (или одним из двух, в зависимости от положения звездочки ).
Я спрашиваю, есть ли лучший способ сделать это.
Это код для поиска строк, начинающихся с searchString:
function escapeRegExp(string){
return string.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, '\\$1');
}
$scope.query = '';
var regex;
$scope.$watch('query', function (value) {
regex = new RegExp('\\b' + escapeRegExp(value), 'i');
}
$scope.filterBySearch = function(article) {
if (!$scope.query) return true;
return regex.test(article.title);
};
1 ответ
Напишите собственный фильтр, например:
iApp.filter('myfilter', function() {
return function( items, types) {
var filtered = [];
angular.forEach(items, function(item) {
if(types.wildcard == false || item.name.match(types.value)) {
filtered.push(item);
}
});
return filtered;
};
});
Где должен быть фильтр:
$scope.types = {wildcard:false, value: /^ab.*cd$/};
Пример HTML
<tr data-ng-repeat="value in values | myfilter:types">
Демо Plunker
Похожие вопросы
Связанные вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Имейте в виду, что JavaScript — это НЕ то же самое, что Java! Включите все ярлыки, относящиеся к вашему вопросу; например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [svelte] и т. д.