node[i].replaceWith(...acc);
в функции parseNode, потому-что у вас цикл по фиксированной длинне количества элементов которые вы получили в начале var l = node.childNodes.length;
, а из-за того что вы один элемент можете менять на несколько с помощью replaceWith, общее количество элементов в ноде увеличивается и в итоге вы не проходите все. Вам нужно или обновлять каждую итерацию переменную l или заменять только на один элемент типа function parseNode(node, search, replace) {
let l = node.childNodes.length;
node = node.childNodes;
let reg = new RegExp(search, "gi");
for(let i = 0; i < l; i++) {
if(node[i].nodeType === Node.ELEMENT_NODE) {
parseNode(node[i], search, replace);
} else if(node[i].nodeType === Node.TEXT_NODE) {
let mas = node[i].textContent.match(reg);
let parts = node[i].textContent.split(reg);
if(0 === parts.length) {
continue;
}
let acc = [];
let span = document.createElement("span");
for (let j = 0; j < parts.length;j++){
//acc.push(document.createTextNode(parts[j]));
span.append(document.createTextNode(parts[j]));
if (j < parts.length - 1 ){
replace.textContent = mas[j];
span.append(replace.cloneNode(true));
//acc.push(replace.cloneNode(true));
}
}
node[i].replaceWith(span);
}
}
}