Подтвердить что ты не робот

Многострочные строки, которые не прерывают отступ

Согласно это обсуждение 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, чтобы удалить пробелы, используемые для отступов?

4b9b3361

Ответ 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
*/