基本上我在一段时间之前玩过一个Steam机器人,并且当你在一个数组中说出一些东西时自动回复,IE是一个'hello-triggers'数组,其中包含“hi”,“你好“等等。每当收到消息时我就会这样做,它会使用indexOf()检查匹配,一切正常,直到我注意到它会注意到'hiasodkaso',或者像'hidemyass'作为“hi”触发器。
所以即使它在一个单词的中间,它也会匹配包含该单词的任何内容。
我如何才能使indexOf只注意到它是否是确切的单词,而不是同一个单词中的其他内容?
我没有使用的脚本,但我会做一个非常类似的例子:
var hiTriggers = ['hi', 'hello', 'yo'];
// here goes the receiving message function and what not, then:
for(var i = 0; i < hiTriggers.length; i++) {
if(message.indexOf(hiTriggers[i]) >= 0) {
bot.sendMessage(SteamID, randomHelloMsg[Math stuff here blabla]); // randomHelloMsg is already defined
}
}
正则表达式不会用于此,对吧?因为它用于表达式或其他任何东西。 (我的英语不是很棒,ikr)
提前致谢。如果我对某些事情不够清楚,请告诉我,我会以另一种方式编辑/制定它! :)
答案 0 :(得分:0)
您可以扩展原型:
String.prototype.regexIndexOf = function(regex, startpos) {
var indexOf = this.substring(startpos || 0).search(regex);
return (indexOf >= 0) ? (indexOf + (startpos || 0)) : indexOf;
}
并且做:
var foo = "hia hi hello";
foo.regexIndexOf(/hi\b/);
或者,如果您不想扩展字符串对象:
foo.substr(i).search(/hi\b/);
这两个例子都来自Is there a version of JavaScript's String.indexOf() that allows for regular expressions?
的最高答案答案 1 :(得分:0)
正则表达式不会用于此,对吧?因为它用于表达式或其他任何东西。 (我的&gt;英语不太棒,ikr)
实际上,正则表达式适用于任何旧的模式匹配。这对此非常有用。
fmsf的答案应该适用于您正在尝试的内容,但是,通常扩展本机对象原型是不满意的。您可以通过这样做轻松破坏库。我会尽可能避免它。在这种情况下,您可以单独使用他的regexIndexOf
函数,也可以与以下内容一起使用:
//takes a word and searches for it using regexIndexOf
function regexIndexWord(word){
return regexIndexOf("/"+word+"\b/");
}
这将允许您根据您的单词数组进行搜索,而无需为每个单词添加特殊符号。