我的表格中有一些数据
[
{
"name": "alex",
"fullname": "Alessandro Magno"
},
{
"name": "alex",
"fullname": "Alessandro Magno"
}
]
但是(name和fullname)不是固定的,它们可能是“key”/“value”,或者其他什么。 我也给了一个模板,例如:
var template = "<span>data.fullname (data.name)</span>".
我的问题如下:
并替换数据。用我的外部来源。 E.g。
str.replace("data.<value>", source[value]);
在Javascript中。
谢谢!
编辑:我可能错误地解释了它。我的源被定义(在这种情况下,是JSON格式的名称/全名列表)。我还有一个模板可供遵循。我必须用源的对应值替换模板中使用的语法(即“data。”['data。'已修复])。希望现在更清楚了!重新谢谢!
答案 0 :(得分:2)
使用字符串的简单replace
调用只会替换子字符串的单个实例。你必须使用正则表达式
看看你想要做什么,我会说你可能正在寻找类似的东西:
var s = "<span>data.fullname (data.name)</span>";
var replacements = {name: 'alex', fullname: 'alessandro'};//example
s.replace(/(data\.)([a-z]+)/g, function(a,b,c)
{
return b + (repl[c] || 'none');
});
这导致“data.alessandro(data.alex)”
这个怎么运作?这种方法的核心是正则表达式:
/(data\.)([a-z]+)/g
,这是非常基本的:
(data\.)
:匹配并捕获文字字符串“data。” ([a-z]+)
:再次:匹配&amp;捕获1个或多个字符以获取数据。 - &GT; “数据”。 g
:是全局标志,将此模式应用于整个字符串。现在,对于找到的这个模式的每个匹配,我提供了一个函数,它传递匹配的子字符串(以及捕获的组作为单独的参数),并使用函数构造替换,而不是提供替换字符串。字符串:
function(a, b, c)
{//a -> entire substring, b-> data., c-> string after data.
return b + (replacements[c] || 'none');// logical || to provide default string replacement
}
就这么简单,真的。假设您的值包含在数组中的对象中,您可以选择编写以下代码:
var vals = [{name: 'alex', fullname: 'alessandro'},{name: 'alex2', fullname: 'alessandro2'}],
results =[],
template = "<span>data.fullname (data.name)</span>";
for (var i=0;i<vals.length;++i)
results[i] = template.replace(/(data\.)([a-z]+)/g, function(a,b,c)
{
return b + (vals[i][c] || 'default');
});
编辑:
要删除data.
子字符串,请将回调函数(和模式)更改为:
s.replace(/data\.([a-z]+)/function(a,c)
{
return replacements[c] || 'none';
});
如果是上述代码:
for (var i=0;i<vals.length;++i)
results[i] = template.replace(/data\.([a-z]+)/g, function(a,c)
{
return vals[i][c] || 'default';
});
你在追求什么
答案 1 :(得分:1)
如果您需要使用模板,可以使用template engine
。基本上它允许您将对象绑定到模板。在场景后面,使用正则表达式解析模板。伪代码:
var template = "<span>{fullname} ({name})</span>";
var html = template({ fullname: data.fullname, name: data.name });
仅举几例:
Underscore更像是一个图书馆工具带,但它提供了一个简单的模板引擎,非常适合常用。
答案 2 :(得分:0)
目前尚不清楚您想要实现的转型是什么,但我可以告诉您,您不应该使用正则表达式来实现它!使用JSON.parse将JSON转换为JavaScript对象,直接转换对象,然后通过JSON.stringify转换回JSON。