删除缩进,但保留模板文字中的换行符

Remove indentation, but keep line breaks in template literal

我有以下模板文字:

let message = `
    1 call
    Alert time: 6:00:57 PM
    `

我已经从这里尝试了各种答案,但是对于我正在使用的 API,这些解决方案中的 none 工作正常。这些解决方案似乎导致开始反引号和结束反引号后的换行符与缩进一起被删除。

因为发生这种情况,我正在处理的 API 将模板文字视为没有换行符的单个字符串。

如何保留所有换行符而只删除 1 callAlert time: 6:00:57 PM 前面的缩进?

我的预期输出是这样的:


1 call
Alert time: 6:00:57 PM

一个正则表达式可以匹配行首的 space 个字符,并且不替换任何字符,只保留换行符:

message.replace(/^ +/gm, '')

演示:

let message = `
    1 call
    Alert time: 6:00:57 PM
    `
document.querySelector('textarea').value = message.replace(/^ +/gm, '');
<textarea></textarea>

我会 split 所有新行 \n 的字符串,然后 trim 数组中的项目以删除空格,然后用新行再次加入它们 \n. filter 是删除 split 数组中可能为空字符串的项目

let message = `
    1 call
    Alert time: 6:00:57 PM
    `;
    
console.log(['', ...message.split('\n').filter(Boolean).map(str => str.trim()), ''].join('\n'));