如何用 MatchData 对象替换 Perl 风格的正则表达式

Chm*_*nik 3 ruby regex rubocop

我正在使用gsub带有正则表达式的方法:

@text.gsub(/(-\n)(\S+)\s/) { "#{$2}\n" }
Run Code Online (Sandbox Code Playgroud)

输入数据示例:

"The wolverine is now es-
sentially absent from 
the southern end
of its European range."
Run Code Online (Sandbox Code Playgroud)

应该返回:

"The wolverine is now essentially
absent from  
the southern end
of its European range."
Run Code Online (Sandbox Code Playgroud)

该方法工作正常,但 rubocop 报告和攻击:

避免使用 Perl 风格的反向引用。

任何想法如何使用MatchDataobject 而不是重写它$2

Eri*_*nil 7

如果你想使用Regexp.last_match

@text.gsub(/(-\n)(\S+)\s/) { Regexp.last_match[2] + "\n" }
Run Code Online (Sandbox Code Playgroud)

或者 :

@text.gsub(/-\n(\S+)\s/) { Regexp.last_match[1] + "\n" }
Run Code Online (Sandbox Code Playgroud)

请注意,在gsub涉及逻辑时应使用块 in 。如果没有逻辑,将第二个参数设置为"\\1\n"or'\1' + "\n"就可以了。