以红宝石方式获得潜在捕获的紧凑方式

时间:2015-10-06 13:37:37

标签: ruby regex capture

我想迭代一些文本行并执行以下操作:

caps = /something(.*)to capture/.match(line).captures
do_something_with_caps(caps[0])

但是,每当我没有得到匹配时,我就会得到Undefined method 'captures' for nil:NilClass。我可以将匹配分配给临时变量,然后在获取捕获之前测试nil,但这对我来说似乎非常冗长。有更紧凑的方法吗?

2 个答案:

答案 0 :(得分:0)

.match.captures替换为.scan作为替代方案:

caps = line.scan(/something(.*)to capture/).flatten
do_something_with_caps(caps[0])

示例:

'somethingabcdto capture'.scan(/something(.*)to capture/).flatten #=> ["abcd"]
'nothing to capture here'.scan(/something(.*)to capture/).flatten #=> []

答案 1 :(得分:0)

caps = $~.captures if /something(.*)to capture/.match(line)