nodejs 在对象中获取值,其中键是与句子匹配的单词列表

时间:2020-12-25 18:10:30

标签: node.js string

所以我有一个对象,其中键是单词列表,值是如下所示的函数:

{
  'test,qwe,asdwe': [Function: test1],
  'lol,xd': [Function: test2]
}

我有一个句子,我想将它与一个关键字匹配,其中句子中的任何单词匹配关键字中的任何单词(一个关键字不能有 2 次相同的单词)

上层对象示例:

一个句子 "hi , how are you lol" 与第二个函数 test2 匹配

我可以匹配钥匙

Object.keys(myObject).some(key => key === 'lol')

但是如果句子有 'lol hhh' 就不起作用,它必须只与句子中的 'lol' 匹配,我想我可以用 strstr 来做吗?但我不知道什么是最好的方法。

如果有人可以帮助我,请=)

谢谢

1 个答案:

答案 0 :(得分:1)

我首先将对象转换为另一个键都是单个单词的对象(例如,将 'lol,xd' 分隔为两个单独的键值对)。然后你可以通过在对象的所有键之间交替来构造一个正则表达式,然后将字符串与正则表达式匹配并调用适当的函数:

const initialObj = {
  'test,qwe,asdwe': () => console.log('test1'),
  'lol,xd': () => console.log('test2'),
};
const separatedObj = Object.fromEntries(
  Object.entries(initialObj).flatMap(
    ([key, fn]) => key.split(',').map(word => [word, fn])
  )
);

const regex = new RegExp(Object.keys(separatedObj).join('|'), 'g');
for (const word of "hi , how are you lol".match(regex)) {
  separatedObj[word]();
}