JavaScript递归返回中间结果而不是最终结果

时间:2016-04-27 15:27:34

标签: javascript recursion

我有这个JavaScript代码,其中rec()函数自己调用。此代码的目的是循环使用类似HTML的文本并替换所有出现的正则表达式" IMG(。*)tid"。

一旦处理完字符串,就应该在" newText"中输出字符串的最终版本。变量(第5行)。



var text = '<IMG tid="302293901" title="test"><P></P><IMG tid="302293901" title="test">';
alert("source text: " + text);

var newText = rec(text);
alert("final source text: " + newText);

function rec(str) {
  var i = str.search("IMG(.*)tid");
  alert("value of i: " + i);
  if (i > -1) {
    str = str.replace("IMG", "BLA");
    alert("modified source text: " + str);
    rec(str);
  }
  return str;
}
&#13;
&#13;
&#13;

当此代码运行时,它会修改&#34; text&#34;中的源字符串。变量,替换所有出现的&#34; IMG&#34;用&#34; BLA&#34;。在执行期间,该函数显示预期的最终字符串,如下所示。

expected final results

然而,问题是第5行的警告框不会返回上面显示的结果,而是返回中间结果(其中只有一个&#34; IMG&#34;条目已被替换)。

返回的字符串如下所示。

actual final results

所以这段代码可能是错误的结构,但是以什么方式?

2 个答案:

答案 0 :(得分:4)

当你从rec中再次运行rec时,你没有对返回的结果做任何事情。您需要将其更改为str = rec(str)

答案 1 :(得分:1)

您需要返回rec ...

的值
function rec(str) {
  var i = str.search("IMG(.*)tid");
  alert("value of i: " + i);
  if (i > -1) {
    str = str.replace("IMG", "BLA");
    alert("modified source text: " + str);
    return rec(str);
  }
  return str;
}