Ruby :获取括号之间的值(没有那些括号)

Ruby : get value between parenthesis (without those parenthesis)

我有 "untitled""untitled(1)""untitled(2)" 这样的字符串。

如果有的话,我想得到括号之间的最后一个整数值。到目前为止,我尝试了很多正则表达式,对我来说有意义的(我是正则表达式的新手)看起来像这样:

但它仍然是 returns 带括号的值。

如果没有左右括号,得到一个空字符串(或nil)会很好。像 "untitled($)" 这样的情况,获取 '$' 字符或 nil 或空字符串就可以了。对于 "untitled(3) animal(4)",我想得到 4

我一直在寻找很多关于如何做到这一点的话题,但它似乎从来没有奏效......我在这里错过了什么?

当您使用 Regex 作为 String#[] 的参数时,您可以选择传入捕获组的索引以提取该组。

If a Regexp is supplied, the matching portion of the string is returned. If a capture follows the regular expression, which may be a capture group index or name, follows the regular expression that component of the MatchData is returned instead.

string = "untitled(1)"
number = string[/\(([0-9]+)\)/, 1]
puts number
#=> 1

/(?<=\()\w+(?=\)$)/ 匹配括号内的一个或多个单词字符(字母、数字、下划线),就在行尾之前:

words = %w[
    untitled
    untitled(1)
    untitled(2)
    untitled(foo)
    unti(tle)d
]
p words.map { |word| word[/(?<=\()\w+(?=\)$)/] }
# => [nil, "1", "2", "foo", nil]