用正则表达式动态替换值

alex89x

我有一些数据的形式

[
    {
        "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。'是固定的])。希望现在情况清楚了!

再次感谢!

埃里亚斯·范·奥特格姆(Elias Van Ootegem)

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用正则表达式动态替换值

来自分类Dev

用正则表达式动态替换值

来自分类Dev

正则表达式(或不)用动态变量替换所有匹配项

来自分类Dev

Notepad ++ 6.5正则表达式用相同的正则表达式替换

来自分类Dev

正则表达式范围内的动态替换

来自分类Dev

如何用空值替换动态正则表达式?

来自分类Dev

Javascript用正则表达式全局替换

来自分类Dev

用Python的列表理解替换正则表达式

来自分类Dev

正则表达式用“和”替换相同的单词

来自分类Dev

用正则表达式和捕获替换

来自分类Dev

用sed替换正则表达式组

来自分类Dev

正则表达式用Javascript替换$ nth元素

来自分类Dev

VB正则表达式。用重复括号替换

来自分类Dev

JS用正则表达式替换数字

来自分类Dev

javascript用正则表达式wilcard替换

来自分类Dev

正则表达式用Java替换双斜杠

来自分类Dev

用升华文字替换正则表达式

来自分类Dev

用正则表达式替换字符串

来自分类Dev

用正则表达式替换数组迭代

来自分类Dev

用正则表达式链接替换iframe

来自分类Dev

R:用sub替换多个正则表达式

来自分类Dev

正则表达式在函数参数周围用[]替换()

来自分类Dev

用可选模式替换正则表达式

来自分类Dev

用正则表达式替换网址中的字符

来自分类Dev

用OR条件替换正则表达式

来自分类Dev

熊猫正则表达式,用char替换group

来自分类Dev

正则表达式用***替换所有密码

来自分类Dev

用Autohotkey替换多行正则表达式

来自分类Dev

用正则表达式替换错误的xml注释