我想String.replace
从回调函数中返回一个值。输入这个并发布代码让我意识到这是多么愚蠢。
但是,我希望有一种方法可以使用实际有效的代码来实现相同的概念。我觉得它就在我面前,我无法抓住它。
content.replace(/{{(.*?)}}/g, function (a, b) {
recurse(b, function(content2) {
return content2;
});
});
我想String.replace
从回调函数中返回一个值。输入这个并发布代码让我意识到这是多么愚蠢。
但是,我希望有一种方法可以使用实际有效的代码来实现相同的概念。我觉得它就在我面前,我无法抓住它。
content.replace(/{{(.*?)}}/g, function (a, b) {
recurse(b, function(content2) {
return content2;
});
});
不知道我是否明白你的意思,但如果你打算从内部函数返回一些东西到外部函数,你应该追求这样的东西:
content.replace(/{{(.*?)}}/g, function (a, b) {
return recurse(b, function(content2) {
return content2;
});
});
您可以实现一些(可能很糟糕)“锁定”概念。我在这里松散地使用术语“锁定”。无论如何,它会强制您的代码同步。
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 线程;从其他线程调用它。
如果您正在寻找替换中的表达式:
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