Können Sie weitere Einzelheiten mitteilen? Was ist die allgemeine Form der Zeichenfolgen, die Sie trennen möchten? Wenn es nur diese eine Zeichenfolge ist, warum nicht einfach das Leerzeichen manuell eingeben?
Pointy
2
Bitte seien Sie genauer, ich glaube nicht, dass jemand verstehen kann, was Sie fragen
Clement Herreman
1
Definieren Sie das Muster, mit dem es übereinstimmen soll, z. B. "ein Leerzeichen, wenn 'My' in der Zeichenfolge gefunden wird" oder "
Fügen
"zwischen MySites". Wie können Sie ein Leerzeichen zwischen 1 Sache platzieren? Ich gehe davon aus, dass Sie "Meine Websites" als Ausgabe möchten.
Rocket Hazmat
#meagar - netter Kommentar (Sarkasmus). Wurde Ihnen nie beigebracht, dass Sie, wenn Sie nichts Nettes zu sagen haben, überhaupt nichts sagen?
Carinlynchin
Antworten:
162
Sie können einfach vor jedem Großbuchstaben ein Leerzeichen einfügen und die führenden und nachfolgenden Leerzeichen abschneiden
Dies funktioniert auch für "1AndAbove". Die andere Lösung nicht. Vielen Dank!!
Desaivv
1
Es "scheitert" bei Akronymen. Wie können wir verhindern, dass es bei zwei oder mehr aufeinander folgenden Kappen wirkt?
Toni Michel Caubet
3
@ToniMichelCaubet einfach, ändern Sie die Regex wie folgt : /([A-Z]+)/g. Das + stellt sicher, dass Sie so viele aufeinanderfolgende Großbuchstaben wie möglich finden.
iFreilicht
Warum werden in diesem Code Klammern benötigt, mit denen Sie '[AZ]' umgeben?
Kristina Bressler
@Kristina In der Klammer steht "Ich bin eine Variable". Ohne die Klammer ergibt sich die Antwort '$ 1y $ 1ites' für 'MySites'
user2051552
127
Dadurch wird jedes Vorkommen eines Kleinbuchstaben gefolgt von einem Großbuchstaben gefunden und ein Leerzeichen dazwischen eingefügt:
s = s.replace(/([a-z])([A-Z])/g,'$1 $2');
In besonderen Fällen, in denen 2 aufeinanderfolgende Großbuchstaben auftreten (z. B. ThisIsATest), fügen Sie unten zusätzlichen Code hinzu:
Nur eine Warnung, dies schlägt für einzelne Buchstaben fehl. "ThisIsATest" führt zu "This Is ATest".
Ceres
3
@ Ceres: Guter Punkt. Dieser Fall könnte behandelt werden, indem stattdessen ein Leerzeichen vor einem Großbuchstaben eingefügt wird, das nicht das erste Zeichen ist. Sie haben jedoch immer noch Fälle, die ohne Worterkennung nicht behandelt werden können, z "RunThisSQLQuery".
Guffa
1
Für den "ThisIsATest" - (ohne 'RunThisSQLQuery') können Sie dies tun: str.replace (/ ([AZ]) / g, '$ 1'). trim ()
carinlynchin
Brillant! Vielen Dank!
Ami Schreiber
21
Darf ich eine geringfügige Änderung der aktuell akzeptierten Antwort vorschlagen:
"thisStringIsGood"// insert a space before all caps.replace(/([A-Z])/g,' $1')// uppercase the first character.replace(/^./,function(str){return str.toUpperCase();})
Antworten:
Sie können einfach vor jedem Großbuchstaben ein Leerzeichen einfügen und die führenden und nachfolgenden Leerzeichen abschneiden
quelle
/([A-Z]+)/g
. Das + stellt sicher, dass Sie so viele aufeinanderfolgende Großbuchstaben wie möglich finden.Dadurch wird jedes Vorkommen eines Kleinbuchstaben gefolgt von einem Großbuchstaben gefunden und ein Leerzeichen dazwischen eingefügt:
In besonderen Fällen, in denen 2 aufeinanderfolgende Großbuchstaben auftreten (z. B. ThisIsATest), fügen Sie unten zusätzlichen Code hinzu:
quelle
"RunThisSQLQuery"
.Darf ich eine geringfügige Änderung der aktuell akzeptierten Antwort vorschlagen:
Dies bedeutet, dass:
Was möglicherweise etwas nützlicher ist, wenn Sie sich mit DB-Spaltennamen befassen (und für einige Dinge Akronyme verwenden).
quelle
Dies sollte ein Leerzeichen zwischen jedem Großbuchstaben einfügen, dem kein Großbuchstabe vorangestellt wurde.
newString
wird den Wert haben, den Sie wollen. Wenn Sie Ihren Code mit Regex kürzen möchten, können Sie den folgenden Code von Javascript camelCase bis Regular Form verwendenquelle
Regex, um die Grenze zwischen Kleinbuchstaben und Großbuchstaben zu finden, und fügen Sie dann ein Leerzeichen ein
http://jsfiddle.net/uXy64/
quelle
Folgendes habe ich letztendlich verwendet, um eine Zeichenfolge in einen Titel zu konvertieren, basierend auf einigen der Antworten hier:
Hier ist eine JSFiddle, in der Sie Ihre Zeichenfolge testen können, um festzustellen, ob diese Ihren Anforderungen entspricht: https://jsfiddle.net/thomastasa/5236dv8t/85/
Beispiele:
quelle
Sie können
String#split()
das großgeschriebene Alphabet ([A-Z]
) und dannArray#join()
das Array mit einem Leerzeichen verwenden und vorausschauen:Oder als String-Objekt-Funktion:
quelle
Ersetzen Sie in einem einzelnen regulären Ausdruck (ohne Verzierungen oder Verknüpfungen) jedes Zeichen, nicht nur Buchstaben
[a-z]
oder[A-Z]
.Hier können Sie mehr über den Blick dahinter
(?<!^)
erfahren .quelle