String#gsub 如何在替换属性中使用匹配项并插入换行符

问题描述 投票:0回答:2

使用

String#gsub
我可以在替换属性中插入断行:

"my string".gsub(/\s/, "\n") #=> "my\nstring"

但是,如果我还想在替换属性中使用正则表达式匹配的一部分,我将被迫使用单个配额(')。然后我不知道如何插入断线。

我已经尝试过:

> "my string".gsub!(/(my )/, '\1\n')
=> "my \\nstring"
> "my string".gsub!(/(my )/, '\1\\n')
=> "my \\nstring"
> "my string".gsub!(/(my )/, '\1\\\n')
=> "my \\nstring"
> "my string".gsub!(/(my )/, '\1\\\\n')
=> "my \\nstring"
> "my string".gsub!(/(my )/, '\1\\\\\n')
=> "my \\\\nstring"
> "my string".gsub!(/(my )/, '\1\\\\\n')
=> "my \\\\nstring"

没有任何作用。

regex ruby gsub
2个回答
2
投票

您不需要使用单引号。只需使用双引号并将

\1
转义为
\\1
:

irb> "my string".gsub(/(my )/, "\\1\n")
=> "my \nstring"

单引号和双引号之间的区别在于,在单引号字符串中,不能使用转义序列(单引号除外)。这些字符串是等效的:

irb> '\1' == "\\1"
=> true
irb> '\n' == "\\n"
=> true

0
投票

虽然很少使用,但您可以在 Ruby 中混合和匹配具有不同引号样式的字符串文字。

来自文档

只要百分比字符串不是最后一个,相邻单引号、双引号、百分比字符串的任何组合都将被连接。

适用于您的问题:

"my string".gsub(/(my )/, '\1' "\n")
#=> "my \nstring"

在上面的代码中,

'\1' "\n"
代表一个single字符串实例。您还可以将其粘贴到 IRB 中,它将返回其双引号等效项:

'\1' "\n"
#=> "\\1\n"

您可以在代码中使用它:

"my string".gsub(/(my )/, "\\1\n")
#=> "my \nstring"
© www.soinside.com 2019 - 2024. All rights reserved.