Javascript用函数替换字符串

Javascript用函数替换字符串,javascript,replace,Javascript,Replace,例如,我有: var obj = { "Age": "{{Range(20, 50)}}" } getRandomRange = function(min, max) { return Math.floor(Math.random() * (max - min)) + min; } 我想用函数getRandomRange20,50替换{Range20,50}},类似这样: var new_obj = str.replace( /{{Range(

例如,我有:

var obj = { "Age": "{{Range(20, 50)}}" }

getRandomRange = function(min, max) {
    return Math.floor(Math.random() * (max - min)) + min;
}
我想用函数getRandomRange20,50替换{Range20,50}},类似这样:

var new_obj = str.replace( /{{Range(x, y)}}/g, getRandomRange(x, y) );
预期结果:obj={Age:30}

我如何做到这一点,这是否可以通过仅替换来实现


谢谢。

您可以获取JSON字符串并用函数调用替换占位符

常数 json='{Age:{{Range20,50}}}', getRandomRange=min,max=>Math.floorMath.random*max-min+min, 占位符=/\{Range\\d+,\s*\d+\}}/g, targetjson=json.replacepholder,ux,x,y=>getRandomRange+x,+y;
console.logJSON.parsetargetjson 您可以获取JSON字符串并用函数调用替换占位符

常数 json='{Age:{{Range20,50}}}', getRandomRange=min,max=>Math.floorMath.random*max-min+min, 占位符=/\{Range\\d+,\s*\d+\}}/g, targetjson=json.replacepholder,ux,x,y=>getRandomRange+x,+y;
console.logJSON.parsetargetjson 这太多了,无法在评论中使用,因此我将解释为什么它在这里不起作用:

一,。str不是字符串

重命名它,因为它可以是msleading。 二,。replace方法返回字符串,而不是对象

将变量重命名为str。 此外,特殊字符需要加上后斜杠:\{ 此外,您的方法正在被调用,而不是实际传递给回调。传递:getRandomRange not getRandomeRangex,y 另外-因为下面的正则表达式中有1个括号,它将返回2个参数0和1,但1都是x,y,0=整个匹配-{Rangex,y} 3.如何提取接近您需求的内容

你不需要正则表达式 4.如果希望结果是一个数字字符串

最后:
对您的类型保持清晰或“清楚”。字符串、对象、数字。

这太多了,无法放在注释中,因此我将解释为什么它在这里不起作用:

1.str不是字符串

重命名它,因为它可以是msleading。 2.replace方法返回字符串,而不是对象

将变量重命名为str。 此外,特殊字符需要加上后斜杠:\{ 此外,您的方法正在被调用,而不是实际传递给回调。传递:getRandomRange not getRandomeRangex,y 另外-因为下面的正则表达式中有1个括号,它将返回2个参数0和1,但1都是x,y,0=整个匹配-{Rangex,y} 3.如何提取接近您需求的内容

你不需要正则表达式 4.如果希望结果是一个数字字符串

最后:

请对您的类型进行澄清或“清除”。字符串、对象、数字。

即使您替换它,它也将是一个字符串。该函数将不会被调用或可调用。即使您替换它,它也将是一个字符串。该函数将不会被调用或可调用。sr我将其命名错误。已编辑我的问题。原因是我需要在内部替换模板双括号{{}使用函数。@BaoPham您不能使用regex。replace方法的返回将是字符串,而不是object。我的答案有NinaScholz的帮助。Thanks@BaoPham这很好。虽然我认为这不是一种应该鼓励的做法。我认为作为一个喜欢正则表达式的人,这是我永远不会做的事情。我会鼓励联合国Dersting simpler solutions.你能给我一个不用正则表达式就用函数调用替换模板变量的解决方案吗?如果它更简单,我会很感激的。谢谢。sr我把它命名错了。已经编辑了我的问题。原因是我需要替换双括号内的模板{{}使用函数。@BaoPham您不能使用regex。replace方法的返回将是字符串,而不是object。我的答案有NinaScholz的帮助。Thanks@BaoPham这很好。虽然我认为这不是一种应该鼓励的做法。我认为作为一个喜欢正则表达式的人,这是我永远不会做的事情。我会鼓励联合国理解更简单的解决方案。你能给我一个不用正则表达式就用函数调用替换模板变量的解决方案吗?如果更简单的话我会很感激的。谢谢。你好@NinaScholz。你的解决方案成功了。谢谢。你能解释一下这部分吗x,y=>getRandomRange+x,+y。我不太理解这个函数调用。替换函数从正则表达式中获取参数。这将返回三部分:第一部分包含所有匹配的值,第二部分包含第一组,即将到来的第一个参数x和第二个参数的另一组。通过保留随机函数,它需要另一个函数以数字形式传递参数和所需类型。I g现在设置它。谢谢@Nina.Hi@NinaScholz。你的解决方案成功了。谢谢。你能解释一下这部分吗?x,y=>getRandomRange+x,+y。我不太理解这个函数调用。替换函数从正则表达式获取参数。它返回三部分:第一部分包含所有匹配的值,第二部分是第一组,第二部分是f或
第一个参数x和第二个参数的另一组。通过保留随机函数,它需要另一个函数以数字形式传递参数和想要的类型。我现在就知道了。谢谢你,尼娜。
var obj = { "Age": "{{Range(20, 50)}}" }
var str = str.replace( /\{\{Range(x, y)\}\}/g, getRandomRange );
getRandomRange = function(min, max) {
    return Math.floor(Math.random() * (max - min)) + min;
}
var obj = {"Age": getRandomRange(20, 50)}
getRandomRange = function(min, max) {
    return Math.floor(Math.random() * (max - min)) + min;
}
var obj = {"Age": String(getRandomRange(20, 50))}