删除" \ n"来自字符串

时间:2014-02-25 15:29:21

标签: ruby regex web

当我将bash命令的输出(在反引号中执行)保存到实例变量时,浏览器(或更具体地说,变量)会删除"\n"个字符。我检查了页面的源代码,它显示如下:

line 1
line 2

line 3
line 4
line 5
line 6
line 7
line 8
line 9
line 10

但浏览器显示如下:

line 1 line 2 line 3 line 4 line 5 line 6 line 7 line 8 line 9 line 10

我把它放在显示输出的方法上:

@variable.each_line do |line|
    if line !~ /word1| word2/
        line.sub("Word_I_don't_want", '')
    end
end

但是变量不会与正则表达式进行比较,而是作为一个整体打印出来。浏览器显示不带<br>的字符串作为单行,但源代码显示正在标识新行但未处理。我试过了

line.sub("\n", "<br>")

但它也没有用。希望有人能为我提供一些建议。

解决:

感谢ilan berci我可以打印所需的值,尽管Tin Man指出应该在控制器上处理文本。所以我修改了我的方法:

tempString = String.new

@redes.each_line do |line|
    if line !~ /word1|word2/
        tempString = tempString + line.sub("word_I_don't_want", "").sub("\n", "<br>")
    end
end

@redes = tempString

因为处理.erb中的文本会为每个不需要的行填充<br>的页面代码(<br>在每个.each_line迭代中都会被投放)。

感谢您的帮助!

4 个答案:

答案 0 :(得分:1)

  <% @variable.each_line do |line| %>
    <% line = if line !~ /word1| word2/ %>
      <%line.sub("Word_I_don't_want", '') %>
    <% end %>
    <%= line %>
    <br/>
  <% end %>

答案 1 :(得分:1)

问题在于浏览器如何显示行尾和空白。它们“吞噬”空格,标签,垂直标签和行尾,在显示时将它们挤压到一个空间中。

例如:

<html>
<body>
foo
bar
</body>
</html>

即使在foo barfoo之间存在行尾(“\ n”),也会在浏览器中显示为bar

你可以通过几种方式解决这个问题:

<html>
<body>
foo<br>
bar<br>
</body>
</html>

或者:

<html>
<body>
<pre>
foo
bar
</pre>
</body>
</html>

将显示为:

foo
bar

鉴于:

<html>
<body>
<p>foo</p>
<p>bar</p>
</body>
</html>

将显示为:

foo

bar

浏览器几乎不尊重空白。具有多个空格和行尾的单词将显示为好像它们只有一个空格。如果我有一串字符:

foo\t \n bar

在页面中,它们将显示为:

foo bar

因为浏览器正在尝试提供帮助。

你如何“修复”你的代码?您可以将文本包装在<pre>块中,将<br>附加到您想要换行的行,或者使用CSS做一些有趣的事情来调整默认值<p>或{{1标签。有很多方法可以达到目的,你只需要知道你正在做什么并选择一条路径。

答案 2 :(得分:0)

我在我的应用程序中使用了它:

def replace_newlines_with_br_tags(text)
  h(text).gsub(/\r\n/, '<br />').gsub(/\r/, '<br />').gsub(/\n/, '<br />')
end

您可以将此添加到您的应用程序助手中,并在您的视图等中使用它

答案 3 :(得分:0)

@variable.gsub(/(?:\n\r?|\r\n?)/, '<br>')

积分here