Hubot 不响应正则表达式变量
Hubot not responding to regex variable
我使用 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
是由字符串数组的内容组成的字符串。在这种情况下打印出正则表达式 returns "/seb/i"
.
有人愿意解释一下吗?我从来都不是 JavaScript 和 Coffeescript 的忠实粉丝:)
Array.prototype.join
以字符串参数作为分隔符。当没有给出参数时,它默认为 ,
。
假设我们有以下关键字数组:
const triggers = ["kw1", "kw2", "kw3"]
调用 triggers.join()
将 return 字符串 kw1,kw2,kw3
。将其传递给 RegExp 构造函数将创建一个 RegExp 对象 that matches the exact string kw1,kw2,kw3
(also ignores case because of the i
flag).
为了用正则表达式匹配多个关键字,您必须用 special-or (|
) operator 将它们分开。
所以不用
regex = new RegExp triggers.join(), 'gi'
你应该写
regex = new RegExp triggers.join('|'), 'i'
您可能还想删除 g
(全局搜索)标志,因为它足以匹配您的案例中关键字的第一次出现。
我使用 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
是由字符串数组的内容组成的字符串。在这种情况下打印出正则表达式 returns "/seb/i"
.
有人愿意解释一下吗?我从来都不是 JavaScript 和 Coffeescript 的忠实粉丝:)
Array.prototype.join
以字符串参数作为分隔符。当没有给出参数时,它默认为 ,
。
假设我们有以下关键字数组:
const triggers = ["kw1", "kw2", "kw3"]
调用 triggers.join()
将 return 字符串 kw1,kw2,kw3
。将其传递给 RegExp 构造函数将创建一个 RegExp 对象 that matches the exact string kw1,kw2,kw3
(also ignores case because of the i
flag).
为了用正则表达式匹配多个关键字,您必须用 special-or (|
) operator 将它们分开。
所以不用
regex = new RegExp triggers.join(), 'gi'
你应该写
regex = new RegExp triggers.join('|'), 'i'
您可能还想删除 g
(全局搜索)标志,因为它足以匹配您的案例中关键字的第一次出现。