【问题标题】:Remove indentation, but keep line breaks in template literal删除缩进,但在模板文字中保留换行符
【发布时间】:2021-05-01 08:23:37
【问题描述】:

我有以下模板文字:

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

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

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

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

我的预期输出是这样的:


1 call
Alert time: 6:00:57 PM

【问题讨论】:

  • 我认为没有任何理由反对我的问题。

标签: javascript template-literals


【解决方案1】:

正则表达式可以匹配行首的空格字符并将其替换为空字符,而只保留换行符:

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

演示:

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

【讨论】:

  • 我很确定我已经尝试过了,但是它导致了我描述的同样的问题。我会再试一次并在 cmets 中更新。
  • 是的,这个答案仍然存在同样的问题。
  • 对我来说工作得很好,换行符都被保留了。 ^ + 不会删除换行符。它只会匹配行首的文字空格字符。
  • 问题可能与我正在使用的 API 有关。不幸的是,我看不到该 API 的代码来理解为什么它没有按预期工作。删除第一个反引号和最后一个反引号之前的换行符。我将尝试添加额外的换行符。
  • 如果代码确实如您在问题中显示的那样,那么我的答案中的代码将产生您正在寻找的输出。如果您的代码实际上不是问题中的内容,请编辑问题以包含它。
【解决方案2】:

我将 split 字符串中的所有新行 \n,然后修剪数组中的项目以删除空格,然后用新行 \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'));

【讨论】:

  • OP 想要 4 行。一行空行,一行'1 call',一行'Alert time: 6:00:57 PM',一行空行。你应该删除filter(Boolean)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多