Hubot 每行匹配多个标记?
Hubot matching on multiple tokens per line?
如何匹配单个消息中多次出现的令牌。
module.exports = (robot) ->
robot.hear /ITEM=(\d+)/, (msg) ->
msg.send 'matched='+msg.match
我希望能够匹配:
blah blah blah ITEM=100 ITEM=200 ITEM=300 blah blah
但是我只得到上面代码的第一个匹配项:
匹配=blah blah blah ITEM=100 ITEM=200 ITEM=300 blah blah,ITEM=100
我总是可以只接受消息并为每个项目手动解析每一行,但似乎使用 robot.hear 应该可以做到。
使用两步法,但是你可以做一些事情让它更简洁一点:
coffee> input = "blah blah blah ITEM=100 ITEM=200 ITEM=300 blah blah"
'blah blah blah ITEM=100 ITEM=200 ITEM=300 blah blah'
coffee> match = input.match /blah blah blah ((ITEM=\d+\s*)+) blah blah$/
[ 'blah blah blah ITEM=100 ITEM=200 ITEM=300 blah blah',
'ITEM=100 ITEM=200 ITEM=300',
'ITEM=300',
index: 0,
input: 'blah blah blah ITEM=100 ITEM=200 ITEM=300 blah blah' ]
coffee> match[1].match /(ITEM=\d+)/g
[ 'ITEM=100',
'ITEM=200',
'ITEM=300' ]
您可以通过在传递给 hear
的正则表达式上使用 g
标志来避免中间匹配。例如:
module.exports = (robot) ->
robot.hear /ITEM=(\d+)/g, (msg) ->
msg.send 'matched='+msg.match.join(',')
所有比赛都可以在 msg.match
中找到。
如何匹配单个消息中多次出现的令牌。
module.exports = (robot) ->
robot.hear /ITEM=(\d+)/, (msg) ->
msg.send 'matched='+msg.match
我希望能够匹配:
blah blah blah ITEM=100 ITEM=200 ITEM=300 blah blah
但是我只得到上面代码的第一个匹配项:
匹配=blah blah blah ITEM=100 ITEM=200 ITEM=300 blah blah,ITEM=100
我总是可以只接受消息并为每个项目手动解析每一行,但似乎使用 robot.hear 应该可以做到。
使用两步法,但是你可以做一些事情让它更简洁一点:
coffee> input = "blah blah blah ITEM=100 ITEM=200 ITEM=300 blah blah"
'blah blah blah ITEM=100 ITEM=200 ITEM=300 blah blah'
coffee> match = input.match /blah blah blah ((ITEM=\d+\s*)+) blah blah$/
[ 'blah blah blah ITEM=100 ITEM=200 ITEM=300 blah blah',
'ITEM=100 ITEM=200 ITEM=300',
'ITEM=300',
index: 0,
input: 'blah blah blah ITEM=100 ITEM=200 ITEM=300 blah blah' ]
coffee> match[1].match /(ITEM=\d+)/g
[ 'ITEM=100',
'ITEM=200',
'ITEM=300' ]
您可以通过在传递给 hear
的正则表达式上使用 g
标志来避免中间匹配。例如:
module.exports = (robot) ->
robot.hear /ITEM=(\d+)/g, (msg) ->
msg.send 'matched='+msg.match.join(',')
所有比赛都可以在 msg.match
中找到。