74

我有一个包含新行的字符串。我想将它们转换为 HTML <br>,但我很难检测到它们。

想象一个这样的 JavaScript 字符串集:

var foo = "Bob
is
cool";

它们是我需要检测的那种新线。他们没有使用\n特殊字符 - 它们只是普通格式。

4

8 回答 8

85

它不起作用的原因是javascript字符串必须在下一个换行符之前终止(\n显然不是)。存在的原因\n是允许开发人员以一种简单的方式将换行符 (ASCII: 10) 放入他们的字符串中。

当你有一个看起来像这样的字符串时:

//Note lack of terminating double quote
var foo = "Bob 

您的代码此时将出现语法错误并停止运行。

如果您希望有一个跨越多行的字符串,您可以\在终止该行之前插入一个反斜杠字符 ' ',如下所示:

//Perfectly valid code
var foo = "Bob \
is \
cool.";

但是,该字符串不会\n在字符串被分成单独的行的位置包含字符。在字符串中插入换行符的唯一方法是插入一个值为 10 的字符,最简单的方法是\n转义字符。

var foo = "Bob\nis\ncool.";
于 2012-04-14T14:59:44.250 回答
75

更新:我刚刚在 JavaScript-ES6 中遇到了一个很棒的语法设计,称为Template literals。您想要做的事情可以从字面上使用`(反引号或重音字符)来完成。

var foo = `Bob
is
cool`;

在这种情况下,foo === "Bob\nis\ncool"是真的。

为什么设计师决定` ... `可以不终止,但是其中" ... "包含' ... '换行符是非法的,这超出了我的理解。

只要确保目标浏览器支持 ES6 指定的 Javascript 实现即可。

 


PS 此语法还支持 PHP、.NET 和其他一些脚本语言中的一个非常酷的特性;即“标记模板文字”,您可以使用它来构建参数化字符串,如下所示:

var a = 'Hello', b = 'World';
console.log(`The computer says ${ a.toUpperCase() }, ${b}!`);
// results in "The computer says HELLO, World!"
于 2016-10-30T23:20:26.917 回答
8

检查\n\r\r\n

换行符有几种表示形式,请参阅http://en.wikipedia.org/wiki/Newline#Representations

于 2012-04-14T14:43:23.827 回答
4

我认为他们\n无论如何都在使用它甚至不可见,或者他们使用\r. 所以只需替换\n\r<br/>

于 2012-04-14T14:44:04.553 回答
3

我认为您不了解 \n 的工作原理。结果字符串仍然只包含一个值为 10 的字节。这在 javascript 源代码中用 \n 表示。

您发布的代码片段实际上不起作用,但如果它起作用,则换行符等同于 \n,除非它是 windows 样式的换行符,在这种情况下它将是 \r\n。(但即使替换仍然有效)。

于 2012-04-14T14:44:25.010 回答
3

这是上面@Andrew Dunn 帖子的一个小补充

结合2可以生成可读的JS和匹配的输出

 var foo = "Bob\n\
    is\n\
    cool.\n\";
于 2016-06-23T09:06:07.100 回答
2

您可以使用以下功能:

  function nl2br (str, is_xhtml) {
     var breakTag = (is_xhtml || typeof is_xhtml === 'undefined') ? '<br />' : '<br>';
     return (str + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1' + breakTag + '$2');
  } 

像这样:

var mystr="line\nanother line\nanother line";
mystr=nl2br(mystr);
alert(mystr);

这应该提醒line<br>another line<br>another line

该函数的来源来自这里: http ://phpjs.org/functions/nl2br:480

这模仿了nl2brphp中的功能......

于 2012-04-14T14:44:35.570 回答
0

我用来在 JS 中转义换行符的查询字符串: LOAD DATA LOCAL INFILE 'Data.csv' INTO TABLE DEMO FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 ROWS;

这涉及到新的 ES6 语法 - Template Literals `` 我尝试将 '\n' 更改为 '\r\n' 并在我的情况下完美运行。

PS:这个例子是我将 CSV 数据上传到 mysql DB 的查询。

于 2019-05-03T09:08:46.937 回答