我有一个包含新行的字符串。我想将它们转换为 HTML <br>
,但我很难检测到它们。
想象一个这样的 JavaScript 字符串集:
var foo = "Bob
is
cool";
它们是我需要检测的那种新线。他们没有使用\n
特殊字符 - 它们只是普通格式。
我有一个包含新行的字符串。我想将它们转换为 HTML <br>
,但我很难检测到它们。
想象一个这样的 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。(但即使替换仍然有效)。
这是上面@Andrew Dunn 帖子的一个小补充
结合2可以生成可读的JS和匹配的输出
var foo = "Bob\n\
is\n\
cool.\n\";
您可以使用以下功能:
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
这模仿了nl2br
php中的功能......
我用来在 JS 中转义换行符的查询字符串:
LOAD DATA LOCAL INFILE 'Data.csv' INTO TABLE DEMO FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 ROWS;
这涉及到新的 ES6 语法 - Template Literals `` 我尝试将 '\n' 更改为 '\r\n' 并在我的情况下完美运行。
PS:这个例子是我将 CSV 数据上传到 mysql DB 的查询。