在es6模板文字,如何包装一个长模板文字到多行而不创建一个新的行在字符串?

例如,如果你这样做:

const text = `a very long string that just continues
and continues and continues`

然后它将为字符串创建一个新的行符号,就像解释它有一个新的行一样。如何在不创建换行符的情况下将长模板文字包装到多行?


当前回答

你可以直接吃掉模板文字中的换行符。

//感谢https://twitter.com/awbjs给我介绍这个想法 //这里:https://esdiscuss.org/topic/multiline-template-strings-that-don-t-break-indentation const printLongLine = continue => { Const text = '一个很长的字符串,只有${continues}${" }和${continuations}和${continuations} '; 返回文本; } console.log (printLongLine('继续'));

其他回答

如果你在字面值的换行符处引入了一个续行符(\),它不会在输出时创建换行符:

const text = `a very long string that just continues\
and continues and continues`;
console.log(text); // a very long string that just continuesand continues and continues

@ codingconspiracy提出的解决方案在节点7上不适合我。好吧,如果我在第一行不使用续行,它就会工作,否则它就会失败。

这可能不是最好的解决方案,但它没有任何问题:

(`
    border:1px solid blue;
    border-radius:10px;
    padding: 14px 25px;
    text-decoration:none;
    display: inline-block;
    text-align: center;`).replace(/\n/g,'').trim();

编辑:我用这个工具做了一个小的NPM模块。它可以在web和Node中工作,我强烈推荐它比我下面回答的代码更健壮。如果您手动将换行符输入为\n,它还允许在结果中保留换行符,并且当您已经为其他内容使用模板文字标记时,它还提供了函数:https://github.com/iansan5653/compress-tag


我知道我现在回答这个问题有点晚了,但接受的答案仍然有一个缺点,即不允许在换行后缩进,这意味着您仍然不能通过转义换行来编写非常漂亮的代码。

相反,为什么不使用带标签的模板文字函数呢?

function noWhiteSpace(strings, ...placeholders) {
  // Build the string as normal, combining all the strings and placeholders:
  let withSpace = strings.reduce((result, string, i) => (result + placeholders[i - 1] + string));
  let withoutSpace = withSpace.replace(/\s\s+/g, ' ');
  return withoutSpace;
}

然后你可以标记任何你想要有换行符的模板文字:

let myString = noWhiteSpace`This is a really long string, that needs to wrap over
    several lines. With a normal template literal you can't do that, but you can 
    use a template literal tag to allow line breaks and indents.`;

如果未来的开发人员不习惯带标签的模板语法,或者不使用描述性函数名,那么这样做确实有可能出现意想不到的行为,但目前感觉这是最干净的解决方案。

你可以直接吃掉模板文字中的换行符。

//感谢https://twitter.com/awbjs给我介绍这个想法 //这里:https://esdiscuss.org/topic/multiline-template-strings-that-don-t-break-indentation const printLongLine = continue => { Const text = '一个很长的字符串,只有${continues}${" }和${continuations}和${continuations} '; 返回文本; } console.log (printLongLine('继续'));

另一种选择是使用Array。像这样加入:

[
    'This is a very long string. ',
    'It just keeps going ',
    'and going ',
    'and going ',
    'and going ',
    'and going ',
    'and going ',
    'and going',
].join('')