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

42 javascript string

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

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

var foo = "Bob
is
cool";
Run Code Online (Sandbox Code Playgroud)

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

Ran*_*Dev 64

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

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

//Note lack of terminating double quote
var foo = "Bob 
Run Code Online (Sandbox Code Playgroud)

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

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

//Perfectly valid code
var foo = "Bob \
is \
cool.";
Run Code Online (Sandbox Code Playgroud)

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

var foo = "Bob\nis\ncool.";
Run Code Online (Sandbox Code Playgroud)

  • 2016年8月更新:现在有办法:/sf/answers/2823429941/ (4认同)

Dav*_*oua 33

更新:我刚刚在JavaScript-ES6中遇到了一个名为Template literals的精彩语法设计.您想要做的事情可以使用`(反引号或重音符号)来完成.

var foo = `Bob
is
cool`;
Run Code Online (Sandbox Code Playgroud)

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

为什么设计师决定` ... `可以不受限制,但在其中使用换行符是非法的" ... "并且' ... '是非法的.

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

 


PS这个语法有一个非常酷的功能,类似于PHP和更多的脚本语言,即" 标记模板文字 ",你可以在其中有这样的字符串:

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

  • 我可以给你反引号答案 10 票吗?它真的像魔术一样起作用!:) (3认同)
  • 最佳答案 兄弟 (2认同)

cfe*_*ann 7

检查\n\r\r\n.

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

  • 我正在做。我已经检查了所有三个:`console.log(story.message.split(/ \ n / g)); console.log(story.message.split(/ \ r / g)); console.log(story.message.split(/ \ r \ n / g));`它们都返回相同的值。没有分裂。 (2认同)