Javascript .toLowerCase/.toUpperCase в смешанном режиме

Я пытаюсь закодировать некоторую функцию. Я хочу изменить каждую вторую букву .toUpperCase. Я заставляю его работать с str.char[0].toUpperCase, но мне приходится делать это со всеми номерами символов вручную (char[0],char[1],char[2]) и так далее.

Может ли кто-нибудь помочь мне с массивом, который преобразует заданную строку следующим образом: teststring в: tEsTsTrInG.

Моя проблема состоит в том, чтобы построить массив, который берет каждую вторую букву данной строки и изменяет ее .toUpperCase.


person t.Prospect    schedule 03.12.2013    source источник


Ответы (4)


Вы можете сделать это с помощью этого непристойного регулярного выражения:

var str = 'teststring';

str = str.replace(/(.)(.)/g, function(_,a,b){
  return a + b.toUpperCase();
});

console.log(str); //=> tEsTsTrInG
person elclanrs    schedule 03.12.2013

Вы можете увидеть строку JS как структуру, подобную "массиву":

function toCamelCase(string){
  // if passed a null string
  if(!string){
    return '';
  }
  var newString = '';
  for( var c = 0; c < string.length; c++){

    newString += c % 2 ? string[c].toLowerCase() : string[c].toUpperCase();

  }
  return newString;
}
person MarcoL    schedule 03.12.2013

Посмотри это:

function convert(str)
{
    str = str.split('');
    for(var i=0, len=str.length;i<len;i++)
    {
       if(i%2)str[i] = str[i].toUpperCase();
    }
    return str.join('');
}

http://jsfiddle.net/rooseve/sf3PR/

person Andrew    schedule 03.12.2013

Как насчет

// Returns string
function fancyString(arg){
    var ret, low, upp, i;
    low = arg.toLowerCase();
    upp = arg.toUpperCase();
    for(i=0,ret="";i<arg.length;i++){
        ret += (i%2)===0 ? low[i] : upp[i];
    }
    return ret;
};
person Rewind    schedule 03.12.2013