我目前正在为NodeJs做一个小模块。为此我需要一个小帮助。
我会告诉它像这样.我有一个字符串变量.它包含一个字符串html值.现在我需要替换$(title)
这样的东西与我的对象{ "title" : "my title" }
.这可以扩展到任何与用户提供.这是当前代码.我想我需要RegEx这样做.你们能帮我吗?
var html = `<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document $(title)</title>
</head>
<body>
<h1>Test file, $(text)</h1>
</body>
</html>`;
function replacer(html, replace) {
// i need a regex to replace these data
//return replacedData;
}
replacer(html, { "title" : "my title", "text" : "text is this" });
字符串
5条答案
按热度按时间wztqucjr1#
您可以使用正则表达式使用一个简单的模板函数,
字符串
使用相同
型
jsfiddle
detail here的
编辑
实际上,正如虎三郎在评论中提到的,它可以重构为
型
jsfiddle的
希望这有帮助
xzlaal3s2#
这个解决方案使用template strings来做你想要的一切。
这种解决方案的优点是,与另一个答案中提出的简单的基于自滚regexp的模板替换策略相比,它支持任意计算,如
字符串
在这个版本的
replacer
中,我们使用new Function
创建一个函数,该函数将对象属性作为参数,并将传入的模板作为模板字符串返回。然后我们使用对象属性的值调用该函数。型
我们使用
${}
来定义模板以进行替换(而不是$()
),但作为\${
进行转义以防止求值。(我们也可以将其指定为常规字符串字面量,但这样会失去多行功能)。型
现在一切都如您所愿:
型
简单的例子:
型
下面是一个计算字段的示例:
型
或甚至
型
4ktjp1zp3#
因为你使用的是ES6模板字符串,所以你可以使用一个叫做'tagged template strings'的特性。使用带标签的模板字符串,你可以修改模板字符串的输出。你可以通过在模板字符串前面放一个“标签”来创建带标签的模板字符串,“标签”是对一个方法的引用,该方法将接收列表中的字符串部分作为第一个参数,并将插值作为剩余参数。关于模板字符串的MDN页面已经提供了一个我们可以用途:使用的示例模板字符串“tag”:
字符串
您可以通过调用以下命令来使用'tag':
型
注意,变量插值使用语法
${'key'}
而不是$(key)
。现在可以调用生成的函数来获得所需的结果:型
在es6console上运行代码示例
e4eetjau4#
我用的是原型,看起来更干净。
字符串
这样使用它
型
nzkunb0c5#
字符串
您可以通过调用以下命令来使用'tag':
型
数据
var data={d1:'t1',d2:'t2',d3:'t3'}