function repairCase(str, substr) {
if (!substr) return ''; //Empty string
//let arr = []; //Найденные результаты. Для наглядного дебага
let str_upper = str.toUpperCase();
let sub_upper = substr.toUpperCase();
let len = sub_upper.length;
let index = 0; //Стартовая позиция
let max_score = -1; //Максимальная оценка на совпадение по регистру.
let answer = ''; //То, что вернёт функция.
while (true) {
let result = str_upper.indexOf(sub_upper, index); //Ищем позицию очередного куска
if (result == -1) break;
let found = str.substr(result, len); //Найденный кусок
let score = 0; //Оценка совпадения
for(let i=0;i<substr.length;i++) { //Простой алгоритм:: чем больше совпадений, тем лучше.
if (substr[i] == found[i]) score++; //Увеличиваем оценку за каждое совпадение по символу.
}
if (score > max_score) { //Нашли более подходящий результат
max_score = score;
answer = found;
}
//arr.push({ pos: result, found: found, score: score });
index = result + 1;
}
//console.log(arr); //Смотрим, что под капотом
return answer;
}
Примеры вызова:
repairCase('Hello World', 'hell'); // 'Hell'
repairCase('Алан Тьюринг', 'а'); // 'а'
repairCase('Дональд Кнут', 'Н'); // 'н'
repairCase('Линус Торвальдс', 'ндc'); // ''
P.S. У меня к вам встречный вопрос: вы программист? Задача решается за 10 минут.