【问题标题】:Ruby gsub doesn't insert newlinesRuby gsub 不插入换行符
【发布时间】:2016-02-20 20:20:42
【问题描述】:

我有一堆字符串,我正在尝试使用 gsub 用换行符替换它们之间的空格:

<%= "string string string".gsub(" ","\n")  %>

但由于某种原因,它只是打印为:

string string string

我做错了什么?

注意:它在 IRB 终端中按预期打印。我只是在浏览器中遇到这个问题,使用 ERB 打印。

【问题讨论】:

  • 您使用的是什么版本的 Ruby?我刚刚在 IRB 中尝试过,没有任何变化,效果很好。
  • @bigtunacan 很奇怪。我正在使用 ruby​​ 2.0.0。
  • 这里的 2.2 按预期工作repl.it/BofP/0
  • 无法复制。
  • 您的浏览器不会像您期望的那样呈现新行,除非您将其包装在pre 标签中或使用&lt;br&gt; 标签而不是新行

标签: ruby newline erb gsub


【解决方案1】:

这对我来说很好用:

    puts "string string string".gsub(" ","\n")

也许你有类似这样的情况:

    x = "string string string"
    y = x.gsub(" ","\n")
    puts x

第 2 行中的空格被替换,但 x 未修改。 结果y 已替换空格。

要直接替换x 中的值,您必须使用gsub!


根据您的编辑:

\n 不会在 HTML 中解释,你需要一个 &lt;br&gt;。 br-tag 可能没有被屏蔽,所以最后你可以在 ERB 中尝试这样的事情:

    x.gsub(" ","<br/>\n").html_safe 

【讨论】:

  • 好吧,我没有在 irb 中尝试过,但事实证明它确实在那里工作。但是当我尝试用 erb 打印它时,它在我的浏览器中不起作用。
  • html 不解释换行符。你可以用
    替换它吗?
  • 啊,我明白了。替换为
    只是打印出“string
    string
    string”。
  • @JoeMorano 这是因为 Rails 中的 ERB(实际上是 Erubis AFAIK)会自动对文本进行 HTML 转义,如果您需要解决这个问题,您需要在末尾添加一个 .html_safe 调用。跨度>
  • 如果 html 将字符串包装在 &lt;pre&gt; 标记中,它将尊重换行符
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-14
  • 2010-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-16
  • 2013-04-14
相关资源
最近更新 更多