访问数组元素或返回空字符串

时间:2017-02-14 06:17:51

标签: ruby

当以下正则表达式匹配没有产生匹配的捕获时,访问元素[1]将返回以下错误:

"".match(/(abc)/)[1] 

返回以下错误:

  

NoMethodError:未定义的方法`[]'为nil:NilClass

是否有更简洁的单行实现来执行等效的实现?

result = "".match(/(abc)/).nil? ? "" : "".match(/(abc)/)[1] 

我正在寻找一种解决方案,它不需要重复匹配的代码**"".match(/abc/)**,而是安全地访问第一个捕获的组,或者以空字符串作为结果失败。

[编辑更清楚]

对于以下字符串,匹配将为“123”:

  

“abc123def” .match(/ ABC([0-9] *)/)[1]   => “123”

和“abcdef”应该返回“”

1 个答案:

答案 0 :(得分:5)

是的,String#[]以正则表达式作为参数。

""[/abc/]

对于给出的例子:

"abc123def"[/(?<=abc)[0-9]*/]
#⇒ "123"