知道字符串中的单词是否在Node JS数组中

时间:2019-01-22 19:45:00

标签: javascript arrays node.js string

我有一个字符串var input = "Hello there, my name is Felix" 和数组var names = ["John", "Bob", "Felix", "Alicia"]。我怎么知道input是否包含names的一个或多个单词? 谢谢。 编辑:我想知道input中的names的哪个词

3 个答案:

答案 0 :(得分:1)

您这里有很多选择,我认为最干净的是:

const namesInString = names.filter( name => input.contains(name) ) 在这种方法中,如果在数组中找到了名称,则filter会对数组进行迭代,并将任何给定名称存储在结果namesInString数组中。

与我无关,请注意我的大小写,因此完整的解决方案应为: const namesInString = names.filter( name => input.toLowerCase().contains(name.toLowerCase()) )

我希望这会有所帮助。

答案 1 :(得分:1)

使用Array#filter和String#includes将获得输入中包含的所有名称。

const input = "Hello there, my name is Felix"
const names = ["John", "Bob", "Felix", "Alicia"]

const res = names.filter(n=>input.includes(n));

console.log(res);

答案 2 :(得分:0)

另一种选择是将filter()match()一起使用,在每次迭代中创建一个新的Regular Expression并在需要时设置标志ignoreCase

const input = "Hello there, my name is Felix";
const names = ["John", "Bob", "Felix", "Alicia", "hello"];

let res = names.filter(name => input.match(RegExp(name, "i")));
console.log("With ignore-case enabled: ", res);

res = names.filter(name => input.match(RegExp(name)));
console.log("Without ignore-case enabled: ", res);

但是,如果您不介意获取匹配项,而只需要测试数组中的某些字符串是否出现在输入字符串上,则可以使用some()使用更快的方法。

const input1 = "Hello there, my name is Felix";
const input2 = "I don't have matches";
const names = ["John", "Bob", "Felix", "Alicia", "hello"];

const res1 = names.some(name => input1.match(RegExp(name, "i")));
console.log("Has coincidences on input1? ", res1);

const res2 = names.some(name => input2.match(RegExp(name, "i")));
console.log("Has coincidences on input2? ", res2);