以任何顺序匹配部分和整个单词

时间:2018-05-25 12:34:21

标签: regex typescript

我希望能够捕获如下字符串:

用户输入搜索字段:

Grey box

在列表中应该匹配:

Grey Boxing Gloves
Grey Window Box
Box with Grey Paint

这不应该匹配:

Greater boxing gloves

尝试:

(?=.*\b\w*\b).+

1 个答案:

答案 0 :(得分:0)

一种方法可能是使用正向前瞻。它们不消耗字符,因此顺序无关紧要。如果正在搜索的查询是Grey box,则regex将如下所示:

^(?=.*Grey)(?=.*box)

我编写了一个代码片段来构建一个正则表达式,无论其中包含多少个单词。但请注意,查询应该在用于正则表达式之前通过过滤/引用过程:

var query = "Grey box";

var list = ['Grey Boxing Gloves',
'Grey Window Box',
'Box with Grey Paint',
'Greater boxing gloves']

// You should filter `query` before building regex
var re = '^(?=.*' + query.split(/\s+/).join(')(?=.*') + ')';

list.forEach(function(x){
   if (x.match(new RegExp(re, 'i'))) {
      console.log(x);
   }
})