在es6模板文字,如何包装一个长模板文字到多行而不创建一个新的行在字符串?
例如,如果你这样做:
const text = `a very long string that just continues
and continues and continues`
然后它将为字符串创建一个新的行符号,就像解释它有一个新的行一样。如何在不创建换行符的情况下将长模板文字包装到多行?
在es6模板文字,如何包装一个长模板文字到多行而不创建一个新的行在字符串?
例如,如果你这样做:
const text = `a very long string that just continues
and continues and continues`
然后它将为字符串创建一个新的行符号,就像解释它有一个新的行一样。如何在不创建换行符的情况下将长模板文字包装到多行?
当前回答
另一种选择是使用Array。像这样加入:
[
'This is a very long string. ',
'It just keeps going ',
'and going ',
'and going ',
'and going ',
'and going ',
'and going ',
'and going',
].join('')
其他回答
类似于Doug的回答,这被我的TSLint配置所接受,并且不受我的IntelliJ自动格式化器的影响:
const text = `a very long string that just ${
continues
} and ${continues} and ${continues}`
使用旧的和新的。模板字面值很好,但是如果你想避免冗长的字面值以获得紧凑的代码行,可以将它们连接起来,ESLint不会引起麻烦。
const text = `a very long string that just continues`
+` and continues and continues`;
console.log(text);
如果你的问题是相反的,你需要保留换行符,但由于某种原因,它们不被尊重,只需在文本容器中添加css属性:
#yourTextContainer {
white-space: pre-line;
}
编辑:我用这个工具做了一个小的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.`;
如果未来的开发人员不习惯带标签的模板语法,或者不使用描述性函数名,那么这样做确实有可能出现意想不到的行为,但目前感觉这是最干净的解决方案。
我有点晚了,但对于未来任何关于这个问题的访问,我发现这个方法最适合我的用例。
我正在运行一个Node.js服务器,并希望以字符串格式返回html,这就是我解决它的方法:
我的响应对象:
const httpResponse = {
message: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ultrices et odio eget blandit. Donec non tellus diam. Duis massa augue, cursus a ornare vel, pharetra ac turpis.',
html: `
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p>Praesent ultrices et odio eget blandit.</p>
<ul>
<li>Donec non tellus diam</li>
<li>Duis massa augue</li>
</ul>
`,
}
当发送http请求时,这将转换为以下内容:
{
"message": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ultrices et odio eget blandit. Donec non tellus diam. Duis massa augue, cursus a ornare vel, pharetra ac turpis.",
"html": "\n\t\t<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>\n\t\t<p>Praesent ultrices et odio eget blandit.</p>\n\t\t<ul>\n\t\t\t<li>Donec non tellus diam</li>\n\t\t\t<li>Duis massa augue</li>\n\t\t</ul>\n\t"
}
这当然很难看,也很难处理。所以在我发送http之前,我修剪字符串的每一行。
httpResponse.html = httpResponse.html.split('\n').map(line => line.trim()).join('')
这是这一行简单代码之后的结果。
{
"message": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ultrices et odio eget blandit. Donec non tellus diam. Duis massa augue, cursus a ornare vel, pharetra ac turpis.",
"html": "<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p><p>Praesent ultrices et odio eget blandit.</p><ul><li>Donec non tellus diam</li><li>Duis massa augue</li></ul>"
}