Я пытаюсь отфильтровать список значений с помощью подстановочных знаков.

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);
};
5
Sortee 18 Авг 2014 в 14:24
1
Проверьте этот ответ.
 – 
bmleite
18 Авг 2014 в 14:36

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

5
Maxim Shoustin 18 Авг 2014 в 14:48