3

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

4 回答 4

6

这是预期的行为。模板文字解决的重要问题之一是多行字符串

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

如果字符串需要进一步处理,这可以通过其他 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.`;
于 2017-09-23T11:40:25.237 回答
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(' ');
于 2018-01-24T07:49:51.000 回答
2

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

老实说,这是最好的方法,因为您没有提供额外的复杂性。

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

于 2017-09-23T11:44:41.323 回答
2

也使用字符串连接:

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

产量:

abcdef

于 2017-09-23T11:44:57.803 回答