Обновлен массив, отражают изменения?

У меня есть этот фрагмент кода, который просматривает ввод пользователя и затем выделяет весь текст в верхнем регистре. Я использовал RegExp и splice для замены, но я не могу понять, как показать результаты на экране, только в консоли.

var allCaps = new RegExp(/(?:[A-Z]{3,30})/g);
var capsArray = [];
var capsFound;
var capitalErrorsList = '';

while (capsFound = allCaps.exec(searchInput)) {
    capsArray.push(capsFound[0]);
}

if(capsArray.length > 0){
    resultsLog.innerHTML += "<p><span class='warning'>Is this an abbreviation? If yes, ensure you have the full version included after its first use.</span></p>";
    for(var five = 0; five < capsArray.length; five++) {
        //display associated text
        capitalErrorsList += '<li>' + capsArray[five] + '</li>';

        capsArray.splice(0, 1, '<span style="background-color: yellow;">'+capsArray[five]+'</span>');

        console.log(capsArray);
    }

    resultsLog.innerHTML += '<ul>' + capitalErrorsList + '</ul>';

}
else {
    resultsLog.innerHTML += "";
}

Добавление в этот кусок кода было шкафом, который я получил, но он дал очень странные результаты.

searchInput = document.getElementById('findAllErrors').innerHTML;
        searchInput = searchInput.replace(capsArray[five], function(){
            return capsArray.splice(0, 1, '<span style="background-color: yellow;">'+capsArray[five]+'</span>');

        });

1 ответ

Решение

Я думаю, что у вас может быть проблема XY.

Если вы хотите выделить заглавные буквы в этом входе, то вы правы, что хотите обернуть их в <span>, Однако, если вы решили использовать регулярные выражения, как насчет замены регулярных выражений?

var searchInput = document.getElementById('searchInput').innerText;
var replacedText = searchInput.replace(/(?:[A-Z]{3,30})/g, '<span style="background-color: yellow;">$&</span>');
document.getElementById('findAllErrors').innerHTML = replacedText;

Вот обновленная скрипка для вас.

Если вы настроены на операции с массивами, map() создает новый массив, применяя функцию к входному массиву. Итак, для вашего примера:

var highlighted = capsArray.map(function(caps) {
    return '<span style="background-color: yellow;">' + caps + '</span>';
});
Другие вопросы по тегам