我的JavaScript`在编写大字符串时非常有用。我的问题是,它考虑了JavaScript中之前的空白量。因此,如果您的字符串在JavaScript中缩进,那么它也会在字符串中缩进。有什么办法摆脱这个?
因为在这样的示例中,我希望html标签与字符串的左侧齐平,但我不想使其与JavaScript的左侧齐平。检查console.log的结果如何更好地理解它。
MyFunction = function() {
console.log(`
<html>
<head>
</head>
<body>
</body>
</html>
`);
}
MyFunction();
console.log:
答案 0 :(得分:2)
答案 1 :(得分:2)
由于您希望它们的html
标签相对于左侧齐平,但仍希望head
和body
相对缩进,因此,您要查找的是替换4个一组每行开头都带有一个空字符串。
string.replace(/^ {4}/gm, '')
这是实时代码..
MyFunction = function() {
console.log(`
<html>
<head>
</head>
<body>
</body>
</html>
`.replace(/^ {4}/gm, ''));
}
MyFunction();
答案 2 :(得分:1)
我将执行以下操作:
MyFunction = function() {
/*however many spaces you want to remove from the front*/
const spaces = ' '; // four spaces
/* or */
const spacesRegex = /\s+/g;
let str = '';
const html = `
<html>
<head>
</head>
<body>
</body>
</html>
`.split('\n')
.forEach(line=>{
str += line.replace(spaces, '') + '\n';
});
console.log(str);
}
答案 3 :(得分:0)
您可以按\n
分割文本,在第一行启示录中找到缩进,然后从其余行中删除该缩进,然后再次加入。
MyFunction = function () {
let indent = "";
console.log(`
<html>
<head>
</head>
<body>
</body>
</html>
`.split("\n").reduce((lines, line) => {
if (!indent.length && line.trim()) {
indent = line.match(/^(\s+)/)[0];
}
lines.push(line.replace(indent, ""));
return lines;
}, []).filter(line => line.length).join("\n"));
};
MyFunction();
答案 4 :(得分:0)
您可以match
在换行符之后的空格并获取第一行的长度。由此,您可以构建一个可以替换它们的正则表达式:
let MyFunction = function(str) {
let matches = str.match(/ +/g)
let initial = matches[0].length // how big is the indent
let re = RegExp(`\n {${initial}}`, 'g') // remove these at the beginning of lines
return str.replace(re, '\n')
}
let str = `
<html>
<head>
</head>
<body>
<div>
some text
</div>
</body>
</html>
`
console.log(MyFunction(str))
答案 5 :(得分:0)
使用简单的正则表达式查找字符串的初始缩进可以通过/^[\r\n]?(\s+)/
完成-结果可以用于再次对初始缩进进行换行。这也充分利用了JS RegExp的性能。
如果您还希望删除第一行和最后一个换行符,只需在字符串替换后添加.trim()
。
function trimLeadingWS(str) {
/*
Get the initial indentation
But ignore new line characters
*/
var matcher = /^[\r\n]?(\s+)/;
if(matcher.test(str)) {
/*
Replace the initial whitespace
globally and over multiple lines
*/
return str.replace(new RegExp("^" + str.match(matcher)[1], "gm"), "");
} else {
// Regex doesn't match so return the original string
return str;
}
};
MyFunction = function() {
console.log(trimLeadingWS('nothing to trim'));
console.log(trimLeadingWS(`
really
quite
some
of (amount of spaces after line break should be ignored)
indent
to
remove
`));
console.log(trimLeadingWS(`
<html>
<head>
</head>
<body>
</body>
</html>
`));
}
MyFunction();