【问题标题】:How to make indexOf only match 'hi' as a match and not 'hirandomstuffhere'?如何使 indexOf 仅匹配“hi”而不匹配“hirandomstuffhere”?
【发布时间】:2014-09-02 13:42:19
【问题描述】:

基本上我前段时间在玩一个 Steam 机器人,当你在一个数组中说话时让它自动回复,即一个“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)

提前致谢。如果我对某些事情不够清楚,请告诉我,我会以另一种方式编辑/制定它! :)

【问题讨论】:

  • 使用正则表达式? /hi\b/?
  • 你不能用indexOf来做这件事,但是你可以使用一个带有单词边界的正则表达式。
  • 如果你想继续使用indexOf,我昨天已经回答了同样的Java问题:stackoverflow.com/a/24675677/18771。您可以调整解决方案。

标签: javascript node.js


【解决方案1】:

不会使用正则表达式,对吧?因为它用于表达式或其他任何东西。 (我的 > 英语不太好,ikr)

实际上,正则表达式适用于任何旧模式匹配。这对这个绝对有用。

fmsf 的答案应该适用于您正在尝试做的事情,但是,通常扩展本机对象原型对 afik 不满意。通过这样做,您可以轻松地破坏库。我会尽可能避免它。在这种情况下,您可以单独使用他的 regexIndexOf 函数,也可以与以下函数一起使用:

    //takes a word and searches for it using regexIndexOf
    function regexIndexWord(word){
        return regexIndexOf("/"+word+"\b/");
    }

这将使您可以根据您的单词数组进行搜索,而无需为每个单词添加特殊符号。

【讨论】:

    【解决方案2】:

    你可以扩展原型:

    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? 的热门答案

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多