【问题标题】:Search multiple strings in sentences在句子中搜索多个字符串
【发布时间】:2017-06-30 21:32:37
【问题描述】:
我尝试在类似列表中搜索“ego d16”
- ego fara d16
- 自我d16
- 自我d22
- d16 自我
- para ego dela d16
必须产生第 (1, 2, 4, 5) 行...
我的代码是
var filter = $(this).val(); //like 'ego d16'
$("#rezultate li").each(function () {
if ($(this)[0].getAttribute('tags').toLowerCase().search(new RegExp(filter, "i")) < 0) {
$(this).hide();
} else {
$(this).show()
}
});
我的实际结果只有第 (2) 行
我该如何解决这个问题?谢谢!
【问题讨论】:
标签:
javascript
jquery
html
search
【解决方案1】:
这是未简化的代码,但它干净且易于理解。它应该做你所期望的。这个想法是拆分输入并检查您提供的列表中的哪些项目包含原始输入的每个部分。如果字符串缺少输入的一部分,则没有匹配项。
var search = "ego d16"; //Input
var strings = ["ego fara d16","ego d16","ego d22","d16 ego","para ego dela d16"] //Test Strings
var searchItems = search.split(" "); //Array of all separate words in 'search'
var results = []; //Indexes of all matches
for (var i = 0; i < strings.length; i++)
{
var inside = true;
for (var j = 0; j < searchItems.length; j++)
{
if (!strings[i].includes(searchItems[j]))
{
inside = false;
}
}
if (inside)
{
results.push(i)
}
}
不过,想出更好的方法应该不难
【解决方案2】:
我认为这样的事情很简单:
let list = [
"ego fara d16",
"ego d16",
"ego d22",
"d16 ego",
"fred flintstone",
"para ego dworda d16",
"para d16"
];
let filters = "ego d16".split(/\s+/);
list.filter(phrase => filters.every(word => phrase.indexOf(word) > -1));
//=> ["ego fara d16", "ego d16", "d16 ego", "para ego dworda d16"]
我认为这很简单。如果不清楚,请告诉我。