Javascript Hubot不响应regex变量
我已经和Hubot玩了一段时间了,实际上时间太长了,但我一直在匹配数组中的字符串<代码>回复是包含一些回复的数组 所以这是可行的:Javascript Hubot不响应regex变量,javascript,regex,coffeescript,hubot,Javascript,Regex,Coffeescript,Hubot,我已经和Hubot玩了一段时间了,实际上时间太长了,但我一直在匹配数组中的字符串回复是包含一些回复的数组 所以这是可行的: module.exports = (robot) -> robot.hear /seb/i, (msg) -> msg.send msg.random replies 然而,这并不是: regex = new RegExp triggers.join(), 'gi' module.exports = (robot) -> rob
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
是由字符串数组的内容组成的字符串。在这种情况下,打印regex返回“/seb/i”
有人想解释一下吗?我从来都不是JavaScript和Coffeescript的超级粉丝:)使用字符串参数作为分隔符。当没有给出参数时,它默认为,
假设我们有以下关键字数组:
const triggers = ["kw1", "kw2", "kw3"]
调用triggers.join()
将返回字符串kw1、kw2、kw3
。将其传递给RegExp构造函数将创建一个RegExp对象
为了用正则表达式匹配多个关键字,必须用分隔符分隔它们
所以不是
regex = new RegExp triggers.join(), 'gi'
你应该写
regex = new RegExp triggers.join('|'), 'i'
您可能还想删除
g
(全局搜索)标志,因为它足以匹配您案例中第一次出现的关键字。它不应该是触发器。join(“|”)
?显然是这样。这只是一条规则吗?为什么不能用逗号代替正则表达式呢?请@fardjad将其添加到适当的答案中,并对我的问题进行可能的解释,我将其标记为答案。