我已经和Hubot一起玩了一段时间,实际上太长了,但是我遇到了匹配数组中的字符串。replies
是一个带有一些答复的数组。
所以这有效:
module.exports = (robot) ->
robot.hear /seb/i, (msg) ->
msg.send msg.random replies
但是,这不是:
regex = new RegExp triggers.join(), 'gi'
module.exports = (robot) ->
robot.hear regex, (msg) ->
msg.send msg.random replies
regex
是由字符串阵列的内容组成的字符串。在这种情况下,打印出正则返回"/seb/i"
。
有人想解释吗?我从来都不是JavaScript和Coffeescript的忠实粉丝:(
Array.prototype.join
将字符串参数作为隔离器。当不给出参数时,它默认为,
。
让我们假设我们有以下关键字:
const triggers = ["kw1", "kw2", "kw3"]
调用triggers.join()
将返回字符串kw1,kw2,kw3
。将其传递到 REGEXP 构造函数将创建 REGEXP 匹配精确字符串kw1,kw2,kw3
的对象(也忽略了i
flag的情况(。
要将多个关键字与正则匹配匹配,必须用Special-Or(|
(操作员将它们分开。
所以而不是
regex = new RegExp triggers.join(), 'gi'
你应该写
regex = new RegExp triggers.join('|'), 'i'
您可能还需要删除g
(全局搜索(标志,因为它足以匹配您的情况下的第一次出现关键字。