Javascript删除`strings'中的空格

时间:2018-09-20 19:52:01

标签: javascript html string

我的JavaScript`在编写大字符串时非常有用。我的问题是,它考虑了JavaScript中之前的空白量。因此,如果您的字符串在JavaScript中缩进,那么它也会在字符串中缩进。有什么办法摆脱这个?

因为在这样的示例中,我希望html标签与字符串的左侧齐平,但我不想使其与JavaScript的左侧齐平。检查console.log的结果如何更好地理解它。

MyFunction = function() {
  console.log(`
    <html>
      <head>
      </head>
      <body>
      </body>
    </html>
  `);
}

MyFunction();

console.log:

enter image description here

6 个答案:

答案 0 :(得分:2)

您是说trim空格?

construction vtable for X-in-child

如果您希望所有标签都自动缩进,我会去图书馆,也许像pretty之类的。

不需要在这里发明轮子。

答案 1 :(得分:2)

由于您希望它们的html标签相对于左侧齐平,但仍希望headbody相对缩进,因此,您要查找的是替换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();