gpt4 book ai didi

javascript - 如何处理模板文字中的无关空白

转载 作者:行者123 更新时间:2023-12-02 02:53:36 26 4
gpt4 key购买 nike

如何处理多行模板文字生成的字符串以排除通过跟随任何/所有 JS 代码缩进创建的所有空格。

我使用了正则表达式替换来删除第一个测试字符串中的前导空格。但是,如果字符串是 HTML,它具有我想保留的缩进结构,该怎么办?

//problem: includes a lot of white space


if(true){
const aString = `This string
is multiline
and indented to match
the surrounding
JS code`
console.log(aString)
}


//what I have tried

if(true){
const aString = `This string
is multiline
and indented to match
the surrounding
JS code`

const newString = aString.replace(/\n[ \t]+/g, " \n")
console.log(newString)
}

//but what about this

if(true){
const aString = `<div class="hello">
<div class="inner">
<span>Some text</span>
</div>
</div>`

const newString = aString.replace(/\n[ \t]+/g, " \n")
console.log(newString)
}

我想打印:

<div class="hello">
<div class="inner">
<span>Some text</span>
</div>
</div>

而不是:

<div class="hello">
<div class="inner">
<span>Some text</span>
</div>
</div>

最佳答案

common-tags包中有一个 stripIndent 标签可以为您完成此操作。但是,您需要为此在第二行开始字符串:

const aString = stripIndent`
<div class="hello">
<div class="inner">
<span>Some text</span>
</div>
</div>
`;

通常,这不可能用简单的正则表达式来完成。你需要做的就是计算每行前面的空格数,并找出最小的空格数。然后删除这些。

一个简单的实现是这样的:

function removeIndent(str) {
const lines = str.split('\n');
if(lines[0] !== '' || lines[lines.length - 1] !== '') {
return str;
}
lines.shift();
lines.pop();

const lens = lines.map(l => l.match(/ */)[0].length)
const minLen = Math.min(...lens);
return '\n' + lines.map(l => l.substr(minLen)).join('\n') + '\n';
}

const inStr = `
foo
bar
baz
`;

const outStr = removeIndent(inStr);

console.log(inStr);
console.log(outStr);

关于javascript - 如何处理模板文字中的无关空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61554658/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com