搜索字符串中的多个单词

时间:2018-09-27 13:26:11

标签: javascript node.js regex express

在此挑战中,我找不到所需的答案。 我在后端使用了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: []

如果我输入的两个单词不是一个接一个,则找不到任务。如何在整个字符串中搜索输入中的单词并返回任务(如果存在任何单词)? (正则表达式?)

2 个答案:

答案 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)));