如何在不拆分字符串的情况下像 Rubular 一样在 ruby 中获取匹配组
How to get Match Groups in ruby like Rubular without spliting the string
Rubular (Example) 如何获取匹配组?
/regex(?<named> .*)/.match('some long string')
match 方法(示例)仅 returns 第一场比赛。
scan 方法 returns 没有命名捕获的数组。
获取命名捕获数组(不拆分)的最佳方法是什么?
我一直认为 Rubular 的工作原理是这样的:
matches = []
"foobar foobaz fooqux".scan(/foo(?<named>\w+)/) do
matches << Regexp.last_match
end
p matches
# => [ #<MatchData "foobar" named:"bar">,
# #<MatchData "foobaz" named:"baz">,
# #<MatchData "fooqux" named:"qux"> ]
如果我们使用 enum_for
和 $~
(Regexp.last_match
的别名),我们可以让它更像 Rubyish:
matches = "foobar foobaz fooqux".enum_for(:scan, /foo(?<named>\w+)/).map { $~ }
Rubular (Example) 如何获取匹配组?
/regex(?<named> .*)/.match('some long string')
match 方法(示例)仅 returns 第一场比赛。
scan 方法 returns 没有命名捕获的数组。
获取命名捕获数组(不拆分)的最佳方法是什么?
我一直认为 Rubular 的工作原理是这样的:
matches = []
"foobar foobaz fooqux".scan(/foo(?<named>\w+)/) do
matches << Regexp.last_match
end
p matches
# => [ #<MatchData "foobar" named:"bar">,
# #<MatchData "foobaz" named:"baz">,
# #<MatchData "fooqux" named:"qux"> ]
如果我们使用 enum_for
和 $~
(Regexp.last_match
的别名),我们可以让它更像 Rubyish:
matches = "foobar foobaz fooqux".enum_for(:scan, /foo(?<named>\w+)/).map { $~ }