防止ES6模板字符串

时间:2017-09-23 11:31:54

标签: javascript ecmascript-6 template-strings

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.

要求

  1. 我无法禁用eslint规则,因为必须执行。

  2. 我无法将数据放在单独的文件中,因为数据是动态的。

  3. 我无法连接多个较短的字符串,因为这样做太多了。

4 个答案:

答案 0 :(得分:4)

这是预期的行为。模板文字解决的一个重要问题是multiline strings

  

在源中插入的任何新行字符都是模板文字的一部分。

如果需要进一步处理字符串,可以使用其他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与默认模板转换器的处理方式special characters不同。如果它们在字符串中使用,则应使用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.`;

答案 1 :(得分:4)

达到目的的一个好方法是加入一系列字符串:

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(' ');

答案 2 :(得分:2)

如果您的问题只是EsLint错误,则可以使用此功能忽略此特定行:/* eslint-disable max-len */

我诚实地认为这是最好的方法,因为你没有给出额外的复杂性。

如果您开始使用正则表达式或连接,则通过不使用连接来更改模板字符串的用途......

答案 3 :(得分:2)

也使用字符串连接:

var string=`abc`+`def`;
console.log(string);

的产率:

abcdef