Многострочные строки, которые не прерывают отступ
Согласно это обсуждение esdiscuss, в ECMAScript 6 можно определить многострочные строки без необходимости размещать последующие строки строки в самом начало строки.
Сообщение Allen Wirfs-Brocks содержит пример кода:
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
, чтобы удалить пробелы, используемые для отступов?
Ответы
Ответ 1
Ответ 2016: пакет dedent-js справится с этим. Обратите внимание, что dedent-js
фактически работает как с вкладками, так и с пробелами, dedent
- это отдельный пакет, который не работает на вкладках:
var dedent = require('dedent-js');
var text = dedent('
<div>
<span>OK</span>
<div>
<div></div>
</div>
</div>
');
Удалит исходящие пробелы в каждой строке и возврат каретки. У него также есть больше пользователей, система отслеживания проблем, и его легче обновлять, чем копирование из Stack Overflow!
Ответ 2
Эта функция реализована путем определения пользовательской функции, а затем ее использования в качестве тега (dontIndent
выше). Удар кода происходит от Zenparsing 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:
![enter image description here]()
Ответ 3
Вы также можете просто заменить строку для двойных пробелов (при условии, что ваш отступ использует пробелы, а не вкладки). Очевидно, что любые двойные пробелы в вашей фактической строке будут удалены, но в большинстве случаев это должно быть нормально.
const MSG = ('Line 1
line 2
line 3').replace(/ +/g, '');
// outputs
/*
Line 1
line 2
line 3
*/