我有這個JavaScript代碼,其中rec()函數本身被調用。此代碼的意圖是循環瀏覽類似HTML的文本並替換所有出現的正則表達式「IMG(。*)tid」。JavaScript遞歸返回中間結果而不是最終結果
一旦它處理了字符串,它應該在「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;
}
運行此代碼時它修改源字符串中的「文本」變量替換「IMG」與「BLA」的所有事件。在執行過程中,該函數顯示預期的最終字符串,如下所示。
然而這種方法的問題是,在第5行的警告框不返回上面示出的結果,但中間結果(其中僅「IMG」條目中的一個已被替換)。
返回的字符串如下所示。
所以這個代碼可能是不正確的結構,但以何種方式?
我不知道,如果你正在學習遞歸或類似的東西,而是:你知道你可以使用RegExp解決這個特定的問題? – MarcoS
你爲什麼不返回遞歸調用的結果?即'返回rec(str)' –
謝謝@MarcoS,是的,在這種情況下,我只是想明白爲什麼這種遞歸行爲像這樣。 – x457812