JavaScript Podziel ciąg znaków na znaki wielkich liter


Odpowiedzi:


226

Zrobiłbym to w .match()ten sposób:

'ThisIsTheStringToSplit'.match(/[A-Z][a-z]+/g);

utworzy tablicę taką jak ta:

['This', 'Is', 'The', 'String', 'To', 'Split']

edit: ponieważ string.split()metoda obsługuje również wyrażenia regularne, można to osiągnąć w ten sposób

'ThisIsTheStringToSplit'.split(/(?=[A-Z])/); // positive lookahead to keep the capital letters

to również rozwiąże problem z komentarza:

"thisIsATrickyOne".split(/(?=[A-Z])/);

47
Nie spowoduje to znalezienia pojedynczych wielkich liter. Proponuję co następuje: "thisIsATrickyOne".match(/([A-Z]?[^A-Z]*)/g).slice(0,-1)
andrewmu

18
.match(/[A-Z][a-z]+|[0-9]+/g).join(" ")

Powinno to również obsługiwać liczby ... łączenie na końcu powoduje konkatenację wszystkich elementów tablicy w zdanie, jeśli tego szukasz

'ThisIsTheStringToSplit'.match(/[A-Z][a-z]+|[0-9]+/g).join(" ")

Wynik

"This Is The String To Split"

To jest doskonałe. Ale każdy, kto to używa, powinien zachować ostrożność w następującym przypadku: 'ThisIs8TheSt3ringToSplit'.match(/[A-Z][a-z]+|[0-9]+/g).join(" ")wyświetli wyjście This Is 8 The St 3 To Split, pomijając mały ciąg znaków ( ring) po 3.
Diablo,

9

Tu masz :)

var arr = UpperCaseArray("ThisIsTheStringToSplit");

function UpperCaseArray(input) {
    var result = input.replace(/([A-Z]+)/g, ",$1").replace(/^,/, "");
    return result.split(",");
}

1

To jest moje rozwiązanie, które jest szybkie, wieloplatformowe, niezależne od kodowania i może być łatwo napisane w dowolnym języku bez zależności.

var s1 = "ThisЭтотΨόυτÜimunəՕրինակPříkladדוגמאΠαράδειγμαÉlda";
s2 = s1.toLowerCase();
result="";
for(i=0; i<s1.length; i++)
{
 if(s1[i]!==s2[i]) result = result +' ' +s1[i];
 else result = result + s2[i];
}
result.split(' ');
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.