我有一些数据的形式
[
{
"name": "alex",
"fullname": "Alessandro Magno"
},
{
"name": "alex",
"fullname": "Alessandro Magno"
}
]
但是(名称和全名)不是固定的,它们可以是“键” /“值”,也可以是其他任何值。我还提供了一个模板,例如:
var template = "<span>data.fullname (data.name)</span>".
我的问题如下:
并替换数据。与我的外部资源。例如
str.replace("data.<value>", source[value]);
用Java语言编写。
谢谢!
编辑:我可能解释错了。定义了我的来源(在这种情况下,为JSON格式的名称/全名列表)。我也有一个模板可以遵循。我必须用源的对应值替换模板中使用的语法(即“ data。” ['data。'是固定的])。希望现在情况清楚了!
再次感谢!
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]+)
:再次:匹配并捕获1个或更多字符更多的数据。-> “数据”。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';
});
是你所追求的
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句