我有一个包含新行的字符串。我想将这些转换为 HTML <br>
s,但我很难检测到它们。
想象一个 JavaScript 字符串集如下:
var foo = "Bob
is
cool";
它们是我需要检测的那种新行。他们没有使用\n
特殊字符 - 它们只是普通格式。
我有一个包含新行的字符串。我想将这些转换为 HTML <br>
s,但我很难检测到它们。
想象一个 JavaScript 字符串集如下:
var foo = "Bob
is
cool";
它们是我需要检测的那种新行。他们没有使用\n
特殊字符 - 它们只是普通格式。
它不起作用的原因是因为 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.";
更新:我刚刚在 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!"
检查\n
或\r
或\r\n
。
有几种换行表示,请参阅http://en.wikipedia.org/wiki/Newline#Representations
我认为他们\n
无论如何都使用它甚至不可见,或者他们使用\r
. 所以只需替换\n
或\r
使用<br/>
我认为您不了解 \n 的工作原理。结果字符串仍然只包含一个值为 10 的字节。这在 javascript 源代码中用 \n 表示。
您发布的代码片段实际上不起作用,但如果确实有效,则换行符将等效于 \n,除非它是 Windows 样式的换行符,在这种情况下它将是 \r\n。(但即使替换仍然有效)。