格式化模板字符串以删除空格,但支持缩进

时间:2018-10-12 07:03:47

标签: javascript

说我有以下模板字符串:

const str1 = ` 
        const x = 5;
`

如果我要在DOM中呈现它,它将在字符串开始之前考虑空格,并使用空格进行呈现。我可以使用str1.trim()解决此问题,但是,可以说我们还有另一个字符串:

const str2 = `
        const x = 1;
          const y = 2;
            const z = 3;
`

我想在每个字符串行之前删除空格,但保留缩进。预期的结果将类似于:

const x = 1;
  const y = 2;
    const z = 3;

有没有办法用正则表达式或js来实现呢?

1 个答案:

答案 0 :(得分:1)

找出第一个换行符和第一个实字符之间的空格字符数量,然后从每一行的开头删除该空格字符数量并修剪:

const str2 = `
        const x = 1;
          const y = 2;
            const z = 3;
`;
const numSpaces = str2.match(/\n +/)[0].length;
const result = str2
  .replace(new RegExp(`\\n {${numSpaces}}`, 'g'), '\n')
  .trim();
console.log(result);

或者,如果您需要事先遍历 all 行以找出缩进最少的行:

const str2 = `
            const x = 1;
          const y = 2;
            const z = 3;
`;
const numSpaces = str2.match(/\n +/g).reduce((a, b) => Math.min(a, b.length - 1), Infinity);
console.log(numSpaces);
const result = str2
  .replace(new RegExp(`\\n {${numSpaces}}`, 'g'), '\n')
  .replace(/^ *$\n/g, '');
console.log(result);