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

时间:2012-04-14 14:40:52

标签: javascript string

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

想象一下像这样设置的JavaScript字符串:

var foo = "Bob
is
cool";

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

8 个答案:

答案 0 :(得分:63)

它不起作用的原因是因为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.";

答案 1 :(得分:29)

更新:我只是came across JavaScript-ES6中一个名为Template literals的精彩语法设计。您想要做的事情可以使用`(反引号或重音符号)完成。

var foo = `Bob
is
cool`;

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

为什么设计师决定` ... `可以保持未终止状态,但" ... "' ... '在其中包含换行符是非法的。

确保定位浏览器支持ES6指定的Javascript实现。

P上。 S.这种语法有一个非常酷的功能,类似于PHP和更多脚本语言,即“Tagged template literals”,你可以在其中使用这样的字符串:

var a = 'Hello', b = 'World';
console.log(`The computer says ${ a.toUpperCase() }, ${b}!`);
// Prints "The computer says HELLO, World!"

答案 2 :(得分:6)

检查\n\r\r\n

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

答案 3 :(得分:3)

我认为你不明白\ n是如何运作的。结果字符串仍然只包含一个值为10的字节。这用javascript源代码表示\ n。

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

答案 4 :(得分: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

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

答案 5 :(得分:1)

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

即可

答案 6 :(得分:1)

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

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

IData<IPerson>

答案 7 :(得分: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语法-模板文字``,我尝试将'\ n'更改为'\ r \ n'并在我的情况下完美运行。

PS:此示例是我向CSV数据库上传CSV数据的查询。