Javscript:如何展平模板字符串

时间:2019-02-25 08:07:13

标签: javascript url template-strings

在Javascript中,我想展平我的模板字符串。所以我想要这个:

const str = `
    my name
    is
    frank
`

要转到此:

const str = 'my name is frank'

我问的原因是因为带有``的巨大空白导致GET请求URL中的错误,例如:

const url = `
    http://0.0.0.0
    :${port}/
    apiCallName?
    var1=${var1}
    var2=${var2}
`

会变成巨大的东西,例如:

const url = '%20%20%20%20%20%20http://0.0.0.0%20%20%20%20%20%20:80/%20%20%20...'

哪个打断了电话。我不想使用' + var1 + '构建字符串。我发现模板字符串的读取效果更好,所以我想继续使用它们。

注意:不应替换所有空格。因为有时候我喜欢写大的字符串,其中带有空格,例如:

const str = `
    <label>This is label 1</label>
    <button>This is button 1</button>
`

这不应该丢失空格,所以不要这样:

const str = '<label>Thisislabel1</label><button>Thisisbutton1</button>'

3 个答案:

答案 0 :(得分:2)

您可以使用replace及其回调函数。

([ ]+)|(\n)
  • ([ ]+)-匹配空格字符一次或多次。 (g1)
  • |-与逻辑OR相同。
  • (\n+)-匹配换行符。 (g2)

const str = `
    my name
    is
    frank
`

const op = str.replace(/([ ]+)|(\n+)/gm,function(match,g1,g2){
  if(g1) return ' '
  else return ''
})

console.log(op.trim())

答案 1 :(得分:1)

使用正则表达式用空字符串替换所有空格:

const port = 'port';
const var1 = 'var1';
const var2 = 'var2';
const url = `
    http://0.0.0.0
    :${port}/
    apiCallName?
    var1=${var1}
    var2=${var2}
`
const finalUrl = url.replace(/\s+/g, '');
console.log(finalUrl);

如果字符串的中间可能包含空格(格式正确的URL不应包含空格),则仅在行的开头或结尾匹配空格:

const port = 'port';
const var1 = 'var1';
const var2 = 'var2';
const url = `
    http://0.0.0.0
    :${port}/
    apiCall foo bar Name?
    var1=${var1}
    var2=${var2}
`
const finalUrl = url.replace(/\s*\n\s*/g, '');
console.log(finalUrl);

答案 2 :(得分:1)

const str = `
        my name
        is
        frank
    `;
    
    console.log(str.replace(/\n+/gi, '').replace(/\s+/gi, ' '));