gpt4 book ai didi

javascript - 用正则表达式动态替换值

转载 作者:行者123 更新时间:2023-11-30 12:51:43 25 4
gpt4 key购买 nike

我在表单中有一些数据

[
{
"name": "alex",
"fullname": "Alessandro Magno"
},
{
"name": "alex",
"fullname": "Alessandro Magno"
}
]

但是 (name 和 fullname) 不是固定的,它们可能是“key”/“value”,或者其他什么。我还得到了一个模板可以遵循,例如:

var template = "<span>data.fullname (data.name)</span>".

我的问题如下:

  • 我必须寻找所有的“数据”。在字符串中,
  • 获取其后的值(在本例中为全名和姓名),
  • 并替换数据。与我的外部资源。例如

    str.replace("data.<value>", source[value]);

在 Javascript 中。

谢谢!

编辑:我可能解释错了。我的来源已定义(在本例中,是 JSON 格式的名称/全名列表)。我也有一个模板可以遵循。我必须用源的对应值替换模板中使用的语法(即“数据”。['数据'是固定的])。希望现在更清楚了!

再次感谢!

最佳答案

使用字符串的简单 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:是全局标志,将这个pattern应用到整个字符串。

现在,对于找到的此模式的每个匹配项,我没有提供替换字符串,而是提供了一个函数,将匹配的子字符串(和捕获的组作为单独的参数)传递给该函数,并使用该函数构造一个替换字符串字符串:

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';
});

是你想要的

关于javascript - 用正则表达式动态替换值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20739977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com