Javscript: Как сгладить строку шаблона

В Javascript я хочу, чтобы сгладить мою строку шаблона. Итак, я хочу это:

const str = `
    my name
    is
    frank
`

Чтобы обратиться к этому:

const str = 'my name is frank'

Причина, по которой я спрашиваю, заключается в том, что большие открытые пространства с `` вызывают ошибки в URL-адресах GET-запросов, например:

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 ответа

Решение

Вы можете использовать замену и функцию обратного вызова.

([ ]+)|(\n)
  • ([ ]+) - Соответствует пробелу один или несколько раз. (г1)
  • | - Чередование такое же, как логическое ИЛИ.
  • (\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())

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

Используйте регулярное выражение, чтобы заменить все пробелы пустой строкой:

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);

Другие вопросы по тегам