このディスカッションの説明 によると、ECMAScript 6では、文字列の後続の行を行の先頭に配置する必要なく、複数行の文字列を定義できます。
Allen Wirfs-Brockの投稿 にはコード例が含まれています。
var a = dontIndent
`This is a template string.
Even though each line is indented to keep the
code neat and tidy, the white space used to indent
is not in the resulting string`;
誰かがこれをどのように達成できるか説明できますか?インデントに使用されている空白を削除するために、このdontIndent
を定義する方法は?
2016の回答: dedent-jsパッケージ がこれを処理します。 dedent-js
パッケージは実際にはタブとスペースの両方で機能します。dedent
は別のパッケージであり、タブでは失敗します。
var dedent = require('dedent-js');
var text = dedent(`
<div>
<span>OK</span>
<div>
<div></div>
</div>
</div>
`);
各行の先頭の空白と先頭の改行を削除します。また、ユーザー数が多く、課題追跡があり、スタックオーバーフローからのコピー貼り付けよりも簡単に更新できます。
この機能は、カスタム関数を定義してタグとして使用することで実装されます(上記のdontIndent
)。コードブローは Zenparsing's Gist からのものです。
function dedent(callSite, ...args) {
function format(str) {
let size = -1;
return str.replace(/\n(\s+)/g, (m, m1) => {
if (size < 0)
size = m1.replace(/\t/g, " ").length;
return "\n" + m1.slice(Math.min(m1.length, size));
});
}
if (typeof callSite === "string")
return format(callSite);
if (typeof callSite === "function")
return (...args) => format(callSite(...args));
let output = callSite
.slice(0, args.length + 1)
.map((text, i) => (i === 0 ? "" : args[i - 1]) + text)
.join("");
return format(output);
}
私はFirefox Nightlyでそれをうまくテストしました:
ダブルスペースの文字列置換を行うこともできます(インデントでタブではなくスペースを使用するとします)。もちろん、実際の文字列内の二重スペースは削除されますが、ほとんどの場合これで問題ありません。
const MSG = (`Line 1
line 2
line 3`).replace(/ +/g, '');
// outputs
/*
Line 1
line 2
line 3
*/