2015-11-22 9 views
7

Ich muss alle unteren Zeichen in obere und alle oberen in untere Zeichenfolgen konvertieren.Konvertiere obere Zeichen nach unten und nach unten nach oben (umgekehrt)

Zum Beispiel

var testString = 'heLLoWorld'; 

Sollte

'HEllOwORLD' 

nach der Umwandlung sein.

Was ist der beste Weg, dies zu implementieren, ohne Temp Zeichenfolge zu speichern.

Ich wäre viel besser, wenn ein solches Ergebnis mit regulären Ausdrücken erreicht werden würde.

Danke. Hier

+0

Da JavaScript-Strings sind unveränderlich dies technisch nicht möglich ist, muss man mit mindestens einer zusätzlichen Saite am Ende (die Sie natürlich wieder auf 'testString' zuweisen, aber die zusätzlichen Zeichenfolge war immer noch da.) Alle bisherigen Antworten enden mit Kopien der Zeichenfolge, 2 mit zwei Kopien (eine in einem Array und eine in einer Zeichenfolge in einem Fall, beide in Arrays in der zweiten), eine mit einer expliziten Kopie in einer zweiten Zeichenfolge. – blm

+0

Siehe [diese Demo] (https://jsfiddle.net/q6rqy2bp/) basierend auf der ursprünglichen Frage Antwort. –

Antwort

4

Hier ist ein regulärer Ausdruck Lösung, die den Vorteil Takes die Tatsache, dass Groß- und Kleinbuchstaben sich durch das Bit unterscheiden, das der Dezimalzahl 32 entspricht:

var testString = 'heLLo World 123', 
 
    output; 
 

 
output= testString.replace(/([a-zA-Z])/g, function(a) { 
 
      return String.fromCharCode(a.charCodeAt()^32); 
 
     }) 
 
    
 
document.body.innerHTML= output;

+1

elegante Lösung für ASCII-/Grundbuchstaben, funktioniert aber nicht für Unicode-Zeichen: '" Ć ".toLowerCase() ==" ć "' but 'String.fromCharCode (" Ć "^ 32)! =" Ć " ' –

+0

Ja, das Leben war in den ASCII-8-Bit-Tagen viel einfacher. –

3

ist eine Idee:

function flipCase(str) { 
    return str.split('').reduce(function(str, char) { 
    return str + (char.toLowerCase() === char 
     ? char.toUpperCase() 
     : char.toLowerCase()); 
    }, ''); 
} 
1
testString.split('').map(function(c) { 
    var f = 'toUpperCase'; 
    if(c === c.toUpperCase()) {f = 'toLowerCase';} 
    return c[f](); 
}).join(''); 
2

Hier ist eine Idee mit RegEx

var testString = 'heLLoWorld'; 
var newString = ''; 
for(var i =0; i< testString.length; i++){ 
    if(/^[A-Z]/.test(testString[i])){ 
     newString+= testString[i].toLowerCase(); 
    } else { 
     newString+= testString[i].toUpperCase(); 
    } 
} 

Arbeits exaple hier http://jsfiddle.net/39khs/1413/

+0

Etwas wie str.replace (/./ g, Funktion (c) {return case-modified oder original c;}) ist wohl eleganter, was eine Anfrage in der Frage ist. – blm

+0

Auch das obige wird für Großbuchstaben aber Nicht-ASCII-Zeichen fehlschlagen, zum Beispiel 'Å' bleibt gleich, sollte aber in 'å' verwandeln. – blm

+0

Es war nur eine Idee, ich habe nicht viel Erfahrung mit JS, aber ich schaue mir Ihre Vorschläge an, danke. –

Verwandte Themen