Поиск нескольких слов в строке - PullRequest
0 голосов
/ 27 сентября 2018

Я не смог найти ответ на этот вопрос.Я использую экспресс в своем бэкэнде и пытаюсь построить маршрут для фильтрации результатов на основе пользовательского ввода.Вот что у меня есть:

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: []

Если я введу два слова, которые не являются одно за другим, задача не найдена.Как я могу найти всю строку для слов из ввода и вернуть задачу, если какие-либо слова присутствуют?(Регулярное выражение?) * * 1007

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Этот поиск и возвращение true - это любое из найденных слов в myString.

const search = 'a aa aaa';
const myString = 'are a aa aaa';

console.log(search.split(' ').some(item => myString.includes(item)));
0 голосов
/ 27 сентября 2018

Вы можете разделить свои слова, а затем для каждого из них проверить, присутствует ли слово в строке, при первом появлении слова в строке вы возвращаете true.

Если вы хотитеиспользуйте регулярное выражение, это тоже должно работать (не забудьте экранировать токены регулярных выражений javascript, такие как * () и т. д.):

var regex = new RegExp(words.split(" ").join('|'));

И затем вы можете проверить регулярное выражение на строку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...