从回调函数中将值返回给String.replace

时间:2013-09-25 04:01:53

标签: javascript

我想从回调函数中将值返回String.replace。 打字并发布代码让我意识到这是多么愚蠢。

但是,我希望有一种方法可以实现与实际工作的代码相同的概念。我觉得它就在我面前,我无法掌握它。

content.replace(/{{(.*?)}}/g, function (a, b) { 

  recurse(b, function(content2) {
    return content2;
  });

});

3 个答案:

答案 0 :(得分:1)

不确定我是否理解了你的意思,但是如果你打算从内部函数返回到外部函数,你应该遵循这样的事情:

content.replace(/{{(.*?)}}/g, function (a, b) { 

  return recurse(b, function(content2) {
    return content2;
  });

});

答案 1 :(得分:0)

如果你在替换中寻找表达式:

function replacer(matchedSubstring, p1, p2, offset, totalString) {
  return p2 + ' ' + p1.toUpperCase();
}

newString = oldString.replace(/(\w+)\s(\w+)/, replacer);

请注意,RegExp中的组数和replacer的参数列表中的参数数量(此处:p1,p2)必须匹配。

请参阅MDN上的String.replace():https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec

答案 2 :(得分:0)

你可以实现一些(可能很糟糕的)“锁定”概念。我在这里松散地使用术语“锁定”。无论如何,它会迫使你的代码同步。

content.replace(/{{(.*?)}}/g, function (a, b) { 

  var myFakeLock = false;
  var outputToReplace = null;

  var otherCallback = function(someInput) {
      ... // do some stuff here
      outputToReplace = someCalculationResult;
      myFakeLock = true; // last line!
  };

  // Call asynchronous function
  someFunctionWithCallback(otherCallback);

  // Busy-wait until our callback completes
  while (!myFakeLock) { }

  return outputToReplace;
});

我没有注意形成一个合适的闭合或任何东西,因此可能需要进行一些修改。

在此解决方案中,在完成所有异步计算之前,String.replace回调不会返回。小心你如何使用它。您不希望以这种方式锁定UI线程;从其他一些帖子中调用它。