在此挑战中,我找不到所需的答案。 我在后端使用了express,并且试图建立一条基于用户输入来过滤结果的路由。 这是我到目前为止的内容:
router.get(
"/search",
passport.authenticate("jwt", { session: false }),
(req, res) => {
const keyword = req.query.keyword;
const location = req.query.location;
if (keyword) {
Task.paginate({
limit: 10,
sort: "_id"
}).then(tasks => {
let filtered = tasks.results.filter(task => {
return task.title.toLowerCase().includes(keyword.toLowerCase());
});
res.json({ ...tasks, results: filtered });
});
} else if (location) {
Task.paginate({
limit: 10,
sort: "_id"
}).then(tasks => {
let filtered = tasks.results.filter(task => {
return task.location.toLowerCase().includes(location.toLowerCase());
});
res.json({ ...tasks, results: filtered });
});
}
}
);
从此路由中可以看到,我正在通过查询字符串发送用户输入。 (关键字和位置)。如果用户仅传递了关键字,我将过滤任务以查看标题是否包含用户传递的字符串。 在用户仅搜索一个字符串的情况下,这种方法很好用。
Example:
Title: "Work to be done today"
Search input: work
output: tasks
Now, what about this scenario:
Title: "Work to be done today"
Search: work today
output: []
如果我输入的两个单词不是一个接一个,则找不到任务。如何在整个字符串中搜索输入中的单词并返回任务(如果存在任何单词)? (正则表达式?)
答案 0 :(得分:1)
您可以拆分单词,然后针对每个单词测试字符串中是否存在该单词,第一次在字符串中存在单词时,返回true。
如果您想使用正则表达式,也应该可以使用(别忘了转义*()等JavaScript正则表达式标记):
var regex = new RegExp(words.split(" ").join('|'));
然后您可以针对字符串测试正则表达式
答案 1 :(得分:0)
此搜索并返回true表示搜索中的任何单词都在myString中。
const search = 'a aa aaa';
const myString = 'are a aa aaa';
console.log(search.split(' ').some(item => myString.includes(item)));