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