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