我正在阅读一个正则表达式组匹配问题,我看到有两种方法可以从正则表达式中引用捕获组,即,
string.match(/(^.*)(:)(.*)/i).capturesif match =~ /(^.*)(:)(.*)/i哪个更好?对于 1),为了安全起见,您必须使用 if 语句来防止 nils,那么为什么不直接提取信息呢?而不是调用字符串捕获方法的第二步。所以选项 2) 对我来说看起来更方便。
pap*_*ppy 17
从 v2.4.6 开始,Ruby 有了named_captures,可以这样使用。只需?<some_name>在捕获组中添加语法即可。
/(\w)(\w)/.match("ab").captures # => ["a", "b"]
/(\w)(\w)/.match("ab").named_captures # => {}
/(?<some_name>\w)(\w)/.match("ab").captures # => ["a"]
/(?<some_name>\w)(\w)/.match("ab").named_captures # => {"some_name"=>"a"}
Run Code Online (Sandbox Code Playgroud)
更重要的是,您可以按名称引用命名捕获!
result = /(?<some_name>\w)(\w)/.match("ab")
result["some_name"] # => "a"
Run Code Online (Sandbox Code Playgroud)