Как заменить каждое найденное вхождение символа предыдущим символом?

Привет! Есть строки:

var str1 = "JOOOK",
str2 = "KOJOA",
str3 = "KKOOM",
str4 = "KOAOO",
str5 = "JOOOO";


после замены должно получиться следующее:

str1 = "JJJJK",
str2 = "KKJJA",
str3 = "KKKKM",
str4 = "KKAAA",
str5 = "JJJJJ";


как это сделать наиболее кратко и лаконично? (есть мнение что рекурсия мне поможет, но если не затруднит, готовый код был бы решением)
Спасибо!

Спасибо вам за отзывы, это первый мой вопрос здесь. Я по привычке не читал правила, опустим фразу "готовый код был бы решением". Я пока так придумал:
var line = "JOKOJ";

console.log(replaceSym(line)); // JJKKJ

function replaceSym(str)
{
    var n = "";

    if ( str[0] != "O" )
    {
        for( var i=0; i<str.length; i++)
        {
            n += str[i] == "O" ? str[i-1] : str[i];
        }
    }

    return n;
}

Теперь думаю как сделать так если первый символ как раз искомый, значит нужно менять на второй, если он не "О". И да, символ обязательно должен быть "О". Спасибо!

update: вот только я поторопился и не заметил следующего:
var str1 = "JOOOK",
    str2 = "KOJOA",
    str3 = "KKOOM",
    str4 = "KOAOO",
    str5 = "JOOOO";

console.log(replaceSym(str1));   //  JJOOK
console.log(replaceSym(str2));   //  KKJJA
console.log(replaceSym(str3));   //  KKKOM
console.log(replaceSym(str4));   //  KKAAO
console.log(replaceSym(str5));   //  KKAAO


Собственно финалочка:
var str1 = "JOOOK",
    str2 = "KOJOA",
    str3 = "KKOOM",
    str4 = "KOAOO",
    str5 = "JOOOO",
    str6 = "OKJAK",
    str7 = "OOOOA",
    str8 = "OOOOO";

console.log(replaceSym(str1));   //  JJJJK
console.log(replaceSym(str2));   //  KKJJA
console.log(replaceSym(str3));   //  KKKKM
console.log(replaceSym(str4));   //  KKAAA
console.log(replaceSym(str5));   //  KKJAK
console.log(replaceSym(str6));   //  KKJAK
console.log(replaceSym(str7));   //  AAAAA
console.log(replaceSym(str8));   //  OOOOO

function replaceSym(str)
{
    var n = "";

    if ( str[0] != "O" )
    {
        for( var i=0; i<str.length; i++)
        {
           n += str[i] == "O" ? str[i-1] : str[i];
        }

        if ( n.indexOf("O") !== -1 )
        {
            n = replaceSym(n);
        }
    }
    else if ( str != "OOOOO" )
    {
        for( var i=0; i<str.length; i++)
        {
           n += str[i] == "O" ? str[i+1] : str[i];
        }

        if ( n.indexOf("O") !== -1 )
        {
            n = replaceSym(n);
        }
    }
    else
    {
        n = str;
    }

    return n;
}


Спасибо всем за потраченное время.
  • Вопрос задан
  • 137 просмотров
Пригласить эксперта
Ответы на вопрос 1
qork
@qork
{ background: #F00B42 }
Можно решить регуляркой /(\w)O/ и методом replace.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы