【问题标题】:JS - Search String with quotes as well as without quotes via regexJS - 通过正则表达式搜索带引号和不带引号的字符串
【发布时间】:2016-03-12 13:49:36
【问题描述】:

我希望能够使用基于我的代码的示例执行以下操作:

  • 搜索 Carpenter Company 返回 2 条记录
  • 搜索“Carpenter Company”(带双引号)返回 1 条记录

到目前为止我无法让它工作,还尝试将正则表达式与以下表达式结合起来:

"[\w\s]+\"

这是我的 plunker 示例:

http://plnkr.co/edit/SqFOqqiRG7oFXHY89o6e?p=preview

特别是我正在研究的代码部分:

    var app = angular.module('filter', [])
app.controller('MainController', function($scope) {
  $scope.deals = [{
    lob: 'Marine, Motor, Carpenter',
    cedent: 'ABC Paris Company',
    treaty: 'QS - Test'
  }, {
    lob: 'Liability',
    cedent: 'Carpenter Company',
    treaty: 'W/XL Test'
  }];
});

// filterBy implementation
app.filter('filterBy', function() {
  return function(array, query) {
    var parts = query  && query.trim().split(/\s+/g) ,
      keys = Object.keys(array[0]);
    if (!parts || !parts.length) return array;
    return array.filter(function(obj) {
      return parts.every(function(part) {
        return keys.some(function(key) {
          return String(obj[key]).toLowerCase().indexOf(part.toLowerCase()) > -1;
        });
      });
    });
  };
});

提前感谢您提供一些解决方法。

【问题讨论】:

  • 试试this code
  • @stribizhev 非常感谢您的快速回复。这对于我在我的问题中所说的目的来说很好。但是如果我想组合它,例如搜索:“Company Country”测试它也应该返回一条记录。有什么建议可以优雅地解决这个问题吗?
  • @stribizhev 非常感谢!但是如果我想组合它,例如搜索:“Company Country”测试它也应该返回一条记录。有什么建议可以优雅地解决这个问题吗?
  • 你会支持任何转义的引号/符号吗?
  • @stribizhev 不,不一定。

标签: javascript angularjs regex search filter


【解决方案1】:

您需要稍微调整一下代码以从输入中收集搜索关键字:

app.filter('filterBy', function() {
  return function(array, query) {
    if (!query) return array;                    // Added for better error checking
    var parts = query  && get_query(query.trim()) , // Use the get_query function here
      keys = Object.keys(array[0]);
    if (!parts || !parts.length) return array;
    return array.filter(function(obj) {
      return parts.every(function(part) {
        return keys.some(function(key) {
          return String(obj[key]).toLowerCase().indexOf(part.toLowerCase()) > -1;
        });
      });
    });
  };
});

function get_query(qry) {      // Function to collect search keywords
  var re = /"([^"]+)"|\S+/g;   // The regex gets all "..." or
  var m;                       //  non-whitespace substrings
  var res = [];
  while ((m = re.exec(qry)) !== null) { 
    res.push(m[1] ? m[1] : m[0]);      // Get either the captured text inside ""
  }                                    // or a non-whitespace chunk

这是updated plunkr

【讨论】:

  • 这太棒了!像魅力一样工作,非常感谢!我想说这应该是我问题的公认答案。不幸的是,我无法将其标记为我还没有 SO 的权利。
  • 您实际上将其标记为已接受,但您还不能upvote它。一旦您的声望增加到 15 分,您就可以投票。
猜你喜欢
  • 2023-03-27
  • 2010-09-13
  • 1970-01-01
  • 1970-01-01
  • 2013-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-08
相关资源
最近更新 更多