说我有以下模板字符串:
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来实现呢?
答案 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);