如何在 ${variable} 的每个实例上拆分``(反引号字符串)
How to split ``(Backtick string) on each instance of ${variable}
所以我的问题是如何在每个变量实例上用 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))
该行执行后,无法获取原始模板字符串。但是,您可以使用标记 function/tagged 模板文字来获取字符串的各个部分,包括替换值:
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`)
我做过的一种方法是使用模板文字。我已经看到这是在一个名为 styled-components
的库中使用的,它允许我们用 js 编写 css。
如果有的话,想看看其他方法吗?
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} !!!`)
为了澄清我对原始问题的评论,这里是默认模板文字函数的作用示例:
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}"`)
当您使用标记模板时(即:您不提供处理模板文字的函数)该语言提供了一个默认函数,其功能与我在函数中所做的类似 defaultTemplateLiteralFn
多于。它 returns 字符串的组合部分与值。
示例函数获取字符串的每个部分并将适当的值放在字符串之后。如果没有值,则使用空字符串。
所以我的问题是如何在每个变量实例上用 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))
该行执行后,无法获取原始模板字符串。但是,您可以使用标记 function/tagged 模板文字来获取字符串的各个部分,包括替换值:
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`)
我做过的一种方法是使用模板文字。我已经看到这是在一个名为 styled-components
的库中使用的,它允许我们用 js 编写 css。
如果有的话,想看看其他方法吗?
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} !!!`)
为了澄清我对原始问题的评论,这里是默认模板文字函数的作用示例:
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}"`)
当您使用标记模板时(即:您不提供处理模板文字的函数)该语言提供了一个默认函数,其功能与我在函数中所做的类似 defaultTemplateLiteralFn
多于。它 returns 字符串的组合部分与值。
示例函数获取字符串的每个部分并将适当的值放在字符串之后。如果没有值,则使用空字符串。