带新行的JavaScript字符串-但不使用\ n

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

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

var foo = "Bob
is
cool";

它们是我需要检测的新行。 他们没有使用\n特殊字符-它们只是纯格式。

asked 2020-08-10T10:17:45Z
8个解决方案
64 votes

它不起作用的原因是因为javascript字符串必须在下一个换行符之前终止(显然不是\n)。 \n的存在是为了使开发人员能够轻松地将换行符(ASCII:10)放入其字符串中。

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

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

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

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

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

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

var foo = "Bob\nis\ncool.";
Randy the Dev answered 2020-08-10T10:18:10Z
33 votes

更新:我刚刚在JavaScript-ES6中遇到了一个很棒的语法设计,称为模板文字。 您可以使用` ... `(反引号或重音符)从字面上完成。

var foo = `Bob
is
cool`;

在这种情况下,` ... `为true。

设计人员为何认为可以不终止` ... `的原因,但" ... "' ... '在其中包含换行符是非法的,这超出了我的范围。

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

 


P. S.此语法具有一个非常酷的功能,类似于PHP和更多脚本语言,即“标记的模板文字”,在其中您可以具有如下字符串:

var a = 'Hello', b = 'World';
console.log(`The computer says ${ a.toUpperCase() }, ${b}!`);
// Prints "The computer says HELLO, World!"
David Refoua answered 2020-08-10T10:18:48Z
6 votes

检查\n\r\r\n

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

cfedermann answered 2020-08-10T10:19:12Z
3 votes

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

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

Evert answered 2020-08-10T10:19:37Z
2 votes

您可以使用以下功能:

  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);

这应该提醒nl2br

该函数的来源是从这里:[http://phpjs.org/functions/nl2br:480]

这模仿了PHP中的nl2br函数...

Yaron U. answered 2020-08-10T10:20:14Z
2 votes

这是@Andrew Dunn上面的帖子的一小部分

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

 var foo = "Bob\n\
    is\n\
    cool.\n\";
J.T. Houtenbos answered 2020-08-10T10:20:38Z
1 votes

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

Simon Edström answered 2020-08-10T10:20:58Z
0 votes

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

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

PS:此示例是我的查询,用于将CSV数据上传到mysql DB。

Dikshit Kathuria answered 2020-08-10T10:21:27Z
translate from https://stackoverflow.com:/questions/10154429/javascript-string-with-new-line-but-not-using-n