У меня есть этот код 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
Почему вы не возвращаете результат рекурсивного вызова? Т.е. 'return rec (str)' –
спасибо @MarcoS, да в этом случае я просто хотел понять, почему эта рекурсия ведет себя так. – x457812