我希望能够捕获如下字符串:
用户输入搜索字段:
Grey box
在列表中应该匹配:
Grey Boxing Gloves
Grey Window Box
Box with Grey Paint
这不应该匹配:
Greater boxing gloves
尝试:
(?=.*\b\w*\b).+
答案 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);
}
})