我希望在每行前面插入str.replace(/^/gm, "\t")
个\t
.这似乎是事实,但只有当使用LF结尾时,当使用CRLF结尾时,一些奇怪的事情发生了,它也会将其插入\r\n
之间.
考虑以下示例代码:
var str1 = "First line\nnext Line";
var str2 = "First line\r\nnext Line";
function escape(str) {
return str.replace(/[\r\n\t]/g, match => {
return {
'\r': '\\r',
'\n': '\\n',
'\t': '\\t',
}[match]
})
}
console.log("First string:")
console.log(escape(str1))
console.log("Second string:")
console.log(escape(str2))
function operation(str) {
return str.replace(/^/gm, "\t");
}
console.log("First string:")
str1 = operation(str1)
console.log(escape(str1))
console.log("Second string:")
str2 = operation(str2)
console.log(escape(str2))
.as-console-wrapper {
max-height: 100% !important;
}
在转换之后,第一个字符串如预期的那样是\tFirst line\n\tnext Line
,而第二个字符串变成了\tFirst line\r\t\n\tnext Line
,这在我使用的VScode Extension中产生了意想不到的行为.VSCode将分别解释\n
和\r
,并用\n\r
替换它们,这导致了不需要的格式.控制台似乎并不在意,并按预期显示它,因此使用了退出功能,以显示那些令人讨厌的回车和换行.
这是预期的行为还是javascript标准库中的错误?