0

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

但是,我希望有一种方法可以使用实际有效的代码来实现相同的概念。我觉得它就在我面前,我无法抓住它。

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

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

});
4

3 回答 3

1

不知道我是否明白你的意思,但如果你打算从内部函数返回一些东西到外部函数,你应该追求这样的东西:

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

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

});
于 2013-09-25T04:34:52.083 回答
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 线程;从其他线程调用它。

于 2013-09-25T04:59:08.507 回答
0

如果您正在寻找替换中的表达式:

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

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

请注意,RegExp 中的组数和替换器的参数列表(这里:p1,p2)中的参数数必须匹配。

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

于 2013-09-25T04:31:47.007 回答