Javascript 在JS中查找字符串中的关键字

Javascript 在JS中查找字符串中的关键字,javascript,if-statement,substring,cycle,text-search,Javascript,If Statement,Substring,Cycle,Text Search,我有一个输入字段,我希望用户键入包含多个关键字之一的文本,这些关键字将根据关键字触发不同的音频文件。(我知道从用户体验的角度来看,这不是很聪明,但这只是虚拟助手的一个模型/演示) 我正在使用这个代码,但我觉得我可以做得更好,你能建议一些替代方案吗 keyword1 = "music"; keyword2 = "news"; keyword3 = "weather"; keyword4 = "cooking"; keyword5 = "pasta";

我有一个输入字段,我希望用户键入包含多个关键字之一的文本,这些关键字将根据关键字触发不同的音频文件。(我知道从用户体验的角度来看,这不是很聪明,但这只是虚拟助手的一个模型/演示)

我正在使用这个代码,但我觉得我可以做得更好,你能建议一些替代方案吗

    keyword1 = "music";
    keyword2 = "news";
    keyword3 = "weather";
    keyword4 = "cooking";
    keyword5 = "pasta";
    keyword6 = "tech";

    if(text.search(keyword1)!=-1) {
      audio.src = a_music;
      audio.play();
    } else if(text.search(keyword2)!=-1){
      audio.src = a_news;
      audio.play();
    } 
   [...]
  }

您应该使用关键字数组,而不是每个单词使用一个不同的变量。那就是小菜一碟了:

const关键字=[“音乐”、“新闻”、“天气”、“烹饪”、“意大利面”、“科技”]
const text=“让我们播放一些音乐”
if(关键字.some(关键字=>text.includes(关键字))){
控制台日志(“找到”)
//audio.src=a_音乐;
//音频播放();
}
可能是一个数组

var array = ["music", "news", "weather", "cooking", "pasta", "tech"];

for(var i = 0; i < array.length; i++){
    if(text.includes(array[i])){
    //do something with i
    break;
  }
}
var数组=[“音乐”、“新闻”、“天气”、“烹饪”、“面食”、“科技”];
对于(var i=0;i
您可以创建一个对象,其中关键字为
key
,文件url为
value
,然后在关键字上迭代以检查文本是否与关键字匹配

const config={
‘音乐’:‘音乐卷曲’,
“新闻”:“新闻URL”,
“天气”:“天气URL”,
‘烹饪’:‘烹饪’,
“意大利面”:“意大利面”,
“tech”:“techUrl”
};
功能匹配(输入,obj){
var matched=Object.keys(obj).find(key=>input.toLowerCase().search(key)>-1);
返回obj[matched]| | null;
}
日志(匹配('cats weather dogs',config));
日志(匹配('cats-tech-dogs',config));

log(匹配('cats dogs',config))在这里使用正则表达式对我来说似乎是一个不错的方法

let关键字={
音乐:“musicSample”,
新闻:“新闻样本”,
天气:“天气样本”,
烹饪:“烹饪样本”,
意大利面:“意大利面样本”,
技术:“techSample”
}
函数搜索关键字(文本){
让keys=Object.keys(关键字)
设re=newregexp(“(“+keys.join(“|”)+”),“g”)
返回text.toLowerCase().match(re)
}
console.log(搜索关键字(“我喜欢音乐和科技”))
//播放第一个遇到的单词或将每个单词排队,以便连续播放您找到的单词

log(searchKeywords('Mama正在煮意大利面食')[0])
下面是一个在字符串列表中搜索关键字的示例,该字符串允许当前关键字的顺序不明确

var keywords = [
    'music',
    // 'news',
    // 'weather',
    // 'cooking',
    // 'pasta',
    'tech',
]

var source = [
    "Create a database and tables",
    "What is up with singing",
    "Why is it cold outside",
    "What time is it",
    "How can I set up an appointment",
    "How to make you're own music",
    "Combining music and technology",
]

function search(keywords, source) {
    var re = new RegExp('(' + keywords.join('|') + ')', 'g')
    var results = []
    for (var i = 0; i < source.length; i++) {
        const text = source[i];
        var result = text.toLowerCase().match(re)
        if (result != null || result != null) {
            results.push(text)
        }
    }
    return results
}

var results = search(keywords, source)

console.log(results)
var关键字=[
"音乐",,
//"新闻",,
//“天气”,
//“烹饪”,
//“意大利面”,
"科技",,
]
变量源=[
“创建数据库和表”,
“唱歌是怎么回事”,
“为什么外面很冷”,
“现在几点了”,
“如何设置预约”,
“如何制作自己的音乐”,
“音乐与科技的结合”,
]
函数搜索(关键字、源){
var re=new RegExp(“(“+关键字.join(“|”)+”),“g”)
var结果=[]
对于(变量i=0;i
执行一个键->值对数组并循环该数组。如果能有一把小提琴给你举个例子就好了,这只是一个纯粹的理论(此外,只要问题已经解决了,它可能会导致脱离主题)。你应该在找到文本时中断
for
循环,否则它将无用地处理所有剩余的字串,他补充道。谢谢。这里有一个很好的,我只会添加一个
toLowerCase
,并最终检查配置中是否存在匹配的键。很好,添加了它。如果没有找到任何内容,我的match函数将返回
未定义的
。但如果没有找到任何内容,则将其更改为返回
null