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

IT技术 javascript string
2021-01-23 16:16:45

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

想象一个 JavaScript 字符串集如下:

var foo = "Bob
is
cool";

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

6个回答

它不起作用的原因是因为 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.";
2016 年 8 月更新:现在有一种方法可以做到这一点:stackoverflow.com/a/40334713/1454514
2021-03-18 16:16:45

更新:我刚刚在 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!"
“为什么设计者决定` ... ` 可以不终止,但是“ ... ” 和 ' ... ' 在其中包含换行符是非法的,这超出了我的理解。” - 1995 年的 Javascript 开发人员与 2015 年的开发人员不同。更改旧式字符串会破坏旧代码。道理很清楚。
2021-03-17 16:16:45
@kiki 所以我建议学习和使用 Babel,以便将 ES6“转换”为 Google Apps 脚本的旧版本兼容javascript。您还可以提出一个名为“如何在 Google Apps 脚本 IDE 中使用 ES6”的新问题,也许有人有解决方案。
2021-03-22 16:16:45
@kiki 似乎 Google Apps支持 ES6 语法(允许这样做的 javascript 版本),
2021-04-07 16:16:45
我正在尝试在 Google Apps 脚本 IDE 中使用`` 并且它说“非法字符。”。怎么处理?
2021-04-09 16:16:45
我可以给你 10 个反引号答案吗?它真的很神奇!:)
2021-04-12 16:16:45

检查\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));它们都返回相同的。没有分裂。
2021-04-10 16:16:45

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

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

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

谢谢。在那种情况下,为什么这不起作用? console.log(story.message.split(/\n/g)); console.log(story.message.split(/\r/g)); console.log(story.message.split(/\r\n/g));他们都返回相同的。没有分裂
2021-03-17 16:16:45