Предотвращение разрывов строк в шаблонной строке ES6
ESLint: строка 403 превышает максимальную длину строки 120 (max-len)
У меня есть длинная строка, которую я построил, используя строки шаблона ES6, но я хочу, чтобы она была без разрывов строк:
var string = `Let me be the 'throws Exception’ to your 'public static void
main (String[] args)’. I will accept whatever you give me my ${love}.`
console.log(string);
Результат:
Let me be the 'throws Exception’ to your 'public static void
main (String[] args)’. I will accept whatever you give me xxx.
Мое ожидание:
Let me be the 'throws Exception’ to your 'public static void main (String[] args)’. I will accept whatever you give me xxx.
Требования:
Я не могу отключить правило eslint, так как принудительное выполнение необходимо.
Я не могу поместить данные в отдельный файл, так как данные являются динамическими.
Я не могу объединить несколько более коротких строк, так как это слишком много работы.
4 ответа
Это ожидаемое поведение. Одной из важных проблем, которые решают литералы шаблона, являются многострочные строки:
Любые символы новой строки, вставленные в источник, являются частью литерала шаблона.
Если строка требует дальнейшей обработки, это можно сделать с помощью других функций JS, таких как регулярные выражения:
var string = `Let me be the 'throws Exception’ to your 'public static void
main (String[] args)’. I will accept whatever you give me.`
.replace(/[\n\r]+ */g, ' ');
String.raw
встроенная функция для преобразования литералов шаблона. Можно использовать функцию тега для обеспечения настраиваемого поведения литералов шаблона. Следует отметить, что String.raw
отличается от шаблона преобразования по умолчанию с точки зрения того, как он обрабатывает специальные символы. Если они используются в строке, они должны быть дополнительно обработаны с unescape-js
или аналогичная вспомогательная функция.
function singleLine(strsObj, ...values) {
const strs = strsObj.raw
.map(str => str.replace(/[\n\r]+ */g, ' '))
.map(unescapeSpecialChars);
return String.raw(
{raw: strs },
...values
);
}
var string = singleLine`Let me be the 'throws Exception’ to your 'public static void
main (String[] args)’. I will accept whatever you give me.`;
Хороший способ достичь своей цели - присоединить массив строк:
var string = [
`Let me be the 'throws Exception’ to your 'public static void`,
`main (String[] args)’. I will accept whatever you give me my ${love}.`
].join(' ');
Используйте также конкатенацию строк:
var string=`abc`+`def`;
console.log(string);
выходы:
abcdef
Если ваша проблема - просто ошибка EsLint, вы можете игнорировать ее для этой конкретной строки, используя эту функцию: /* eslint-disable max-len */
По моему честному мнению это лучший подход, потому что вы не даете дополнительной сложности.
Если вы начинаете использовать регулярное выражение или конкатенацию, вы меняете назначение строки шаблона, не используя конкатенацию...