\n
是 JavaScript 中的通用换行符序列吗?如果不是,我该如何确定当前环境所使用的字符?
我不是在问 HTML 的换行元素 (<BR/>
)。我询问的是 JavaScript 字符串中使用的换行字符序列。
\n
是 JavaScript 中的通用换行符序列吗?如果不是,我该如何确定当前环境所使用的字符?
我不是在问 HTML 的换行元素 (<BR/>
)。我询问的是 JavaScript 字符串中使用的换行字符序列。
我刚刚使用这个简单的 JavaScript 测试了几个浏览器:
function log_newline(msg, test_value) {
if (!test_value) {
test_value = document.getElementById('test').value;
}
console.log(msg + ': ' + (test_value.match(/\r/) ? 'CR' : '')
+ ' ' + (test_value.match(/\n/) ? 'LF' : ''));
}
log_newline('HTML source');
log_newline('JS string', "foo\nbar");
log_newline('JS template literal', `bar
baz`);
<textarea id="test" name="test">
</textarea>
在Windows上,IE8和Opera 9使用\r\n
。我测试的所有其他浏览器(Windows上的Safari 4和Firefox 3.5以及Linux上的Firefox 3.0)都使用\n
。当设置值时,它们都可以很好地处理\n
,尽管IE和Opera会将其再次转换为\r\n
。有一篇名为Line endings in Javascript的SitePoint文章提供了更多细节。
还要注意,这与HTML文件本身中的实际换行符无关(\n
和\r\n
都会产生相同的结果)。
在提交表单时,所有浏览器都将换行符规范化为URL编码中的%0D%0A
。要查看,请加载例如data:text/html,<form><textarea name="foo">foo%0abar</textarea><input type="submit"></form>
并按提交按钮。(某些浏览器会阻止提交页面的加载,但您可以在控制台中查看已编码的URL表单值。)
我认为您实际上不需要进行太多的确定性工作。如果您只想在换行符上拆分文本,则可以执行以下操作:
lines = foo.value.split(/\r\n|\r|\n/g);
\r\n
视为两个换行符而不是一个。如果你想简短一些,/\r?\n/g
可能就可以了(毕竟谁还在用Mac OS 9呢?)。 - mercatorCRLF
和 CR
进行换行会导致字符串长度不同? - Ilya Loskutov是的,它是通用的。
虽然'\n'
是通用的换行符字符,但您必须记住,根据您的输入,换行符可能会在回车符('\r'
)之前出现。
不要使用"\n"。试试这个:
var string = "this\
is a multi\
line\
string";
只需输入反斜杠并继续前进!它像魔法一样有效。
"this\"
真的比 "this\n"
更不易读吗?如果你问我,这相当主观... 我喜欢在任何可以的地方节省一个字符(和按键)。开发者都是懒惰的 :) - Qasim处理换行符的最简单方法可能是统一处理所有情况,而不是检查哪种情况然后应用它。例如,如果需要替换换行符,则可以执行以下操作:
htmlstring = stringContainingNewLines.replace(/(\r\n|\n|\r)/gm, "<br>");
如果你在编写HTML代码,那么使用<br />
,否则请使用\n。
在一个邮件链接函数中,我使用了"%0D%0A":
function sendMail() {
var bodydata="Before "+ "%0D%0A";
bodydata+="After"
var MailMSG = "mailto:aaa@sss.com"
+ "?cc=07@sss.com"
+ "&subject=subject"
+ "&body=" + bodydata;
window.location.href = MailMSG;
}
<a href="#" onClick="sendMail()">Contact Us</a>
使用ES6,您可以使用反引号(``
),它位于任何大小为75%或更大的美国布局键盘上方的Esc按钮下面。因此,您可以编写类似于以下内容的内容:
var text = `fjskdfjslfjsl
skfjslfkjsldfjslfjs
jfsfkjslfsljs`;
获取当前浏览器的行分隔符:
function getLineSeparator() {
var textarea = document.createElement("textarea");
textarea.value = "\n";
return textarea.value;
}
return textarea.value;
的翻译是什么? - XP1JSON.stringify
会改变结果中的字符吗?如果我尝试在alert()
调用中查看结果,除非我先将其字符串化,否则它不会显示给我(当然,字符不需要可读性才能有效)。 - user890167注意 - 在使用ExtendScript JavaScript(像Photoshop CS3+这样的Adobe脚本语言)时,应该使用"\r"字符。 "\n"将被解释为字体字符,因此许多字体将使用块字符代替。
例如(选择名为'Note'的图层并在所有句点后添加换行符):
var layerText = app.activeDocument.artLayers.getByName('Note').textItem.contents;
layerText = layerText.replace(/\. /g,".\r");
\n
和<br/>
在我的Photoshop脚本中无法正常工作...谢谢! - Jake StoefflerprintAccountSummary: function()
{return "Welcome!" + "\n" + "Your balance is currently $1000 and your interest rate is 1%."}
};
console.log(savingsAccount.printAccountSummary()); // Method
输出:
Welcome!
Your balance is currently $1000 and your interest rate is 1%.
getValue
的函数,接受value
并返回value.replace(/\r\n/g,'\n')
,只是为了使输出在不同浏览器/平台上保持一致。 - Roy Tinker