Как разделить `` (строку с обратным тэгом) на каждый экземпляр $ {variable} - PullRequest
0 голосов
/ 07 февраля 2019

Так что мой вопрос в том, как я могу разделить строку с backtick на каждый экземпляр переменной.

Я пробовал с \${.*?}, но это не будет работать, потому что ${variable} будет заменен переменнойсначала значения, а затем будет выполнена функция разделения.

Есть идеи, как это сделать?

let a = 2
let b = 4
let x = `Superman${a}hello${b}one more`.split(/\${.*?}/g)

console.log(x)

На стороне нет: Мне не нужно решение с переносом его на "или".

console.log('`Superman${a}hello${b}one more`'.split(/\${.*?}/g))

Ответы [ 3 ]

0 голосов
/ 07 февраля 2019

Один из способов, которые я сделал, - это использование литерала шаблона.я видел, что это используется в библиотеке styled-components, которая позволяет нам писать css с помощью js.

Хотелось бы увидеть другие методы, если таковые имеются?

function splitOnVariable(str, age){
  // first argument to function will always be array of strings provided in input string.
  return str
}

let a = 1;
let b = 2;

console.log(splitOnVariable`hello${a} break me on variable${b} !!!`)
0 голосов
/ 07 февраля 2019

Чтобы пояснить мой комментарий к исходному вопросу, приведу пример того, что делает шаблонная функция по умолчанию:

function defaultTemplateLiteralFn(strs, ...args) {
  return strs.map((str, idx) => str+(args[idx]||'')).join('');
}

const test = "special test";
const a = 10;
const b = 432;
console.log(`This is a ${test}. "${a}+${b}=${a+b}"`)
console.log(defaultTemplateLiteralFn`This is a ${test}. "${a}+${b}=${a+b}"`)

Когда вы используете шаблон с тегами (IE: вы не предоставляете функцию для обработки литерала шаблона) Язык предоставляет функцию по умолчанию, которая делает нечто похожее наЯ делаю в своей функции defaultTemplateLiteralFn выше.Возвращает объединенные части строки со значениями.

Функция-пример берет каждую часть строки и помещает соответствующее значение после строки.Если значения нет, тогда используется пустая строка.

0 голосов
/ 07 февраля 2019

После выполнения строки нет способа получить исходную строку шаблона.Однако вы можете использовать функцию тега / помеченный литерал шаблона для получения частей строки, включая значения подстановки:

function Test() {
  console.log(arguments)
  return arguments.length - 1
}

let a = 2
let b = 4
let c = Test `Superman${a}hello${b}one more`
console.log(`This template string has ${c} substituted values`)
...