Wie kann ich eine Zeichenfolge wie "helloThere" oder "HelloThere" in JavaScript in "Hello There" konvertieren?
javascript
regex
string
HyderA
quelle
quelle
Antworten:
Schreiben Sie den ersten Buchstaben groß - als Beispiel.
Beachten Sie den Platz in
" $1"
.BEARBEITEN: Ein Beispiel für die Großschreibung des ersten Buchstabens wurde hinzugefügt. Falls der erste Buchstabe bereits groß geschrieben ist, haben Sie natürlich einen freien Platz zum Entfernen.
quelle
text.replace
, ich habe Funktionsaufrufe mit 2+ Argumenten mit Leerzeichen für LesbarkeitNon-GoogleChrome
?Alternativ mit lodash :
Beispiel:
Lodash ist eine feine Bibliothek Verknüpfung zu vielen alltäglichen js tasks.There sind viele andere ähnliche String - Manipulation Funktionen zu geben , wie zum Beispiel
camelCase
,kebabCase
usw.quelle
hello world
dann sollte die Ausgabe seinHello There
. In diesem Fall ist loadash nicht hilfreich.hello world
inHello World
lodash.com/docs/4.17.15#upperFirsthello there
zuhello world
.Ich hatte ein ähnliches Problem und habe es so behandelt:
Für eine robustere Lösung:
http://jsfiddle.net/PeYYQ/
Eingang:
Ausgabe:
quelle
Beispiel ohne Nebenwirkungen.
In ES6
quelle
Die beste Zeichenfolge, die ich zum Testen von Funktionen von Kamelfall zu Titelfall gefunden habe, ist dieses lächerlich unsinnige Beispiel, das viele Randfälle testet. Nach meinem besten Wissen behandelt keine der zuvor veröffentlichten Funktionen dies korrekt :
ToGetYourGEDInTimeASongAboutThe26ABCsIsOfTheEssenceButAPersonalIDCardForUser456InRoom26AContainingABC26TimesIsNotAsEasyAs123ForC3POOrR2D2Or2R2D
Dies sollte konvertiert werden zu:
Um Ihr GED rechtzeitig zu erhalten, ist ein Song über die 26 ABCs von entscheidender Bedeutung, aber ein persönlicher Personalausweis für Benutzer 456 in Raum 26A, der ABC 26-mal enthält, ist nicht so einfach wie 123 für C3PO oder R2D2 oder 2R2D
Wenn Sie nur eine einfache Funktion wünschen, die Fälle wie den oben genannten behandelt (und mehr Fälle als viele der zuvor beantworteten), ist hier die, die ich geschrieben habe. Dieser Code ist nicht besonders elegant oder schnell, aber er ist einfach, verständlich und funktioniert.
Ein online lauffähiges Beispiel ist jsfiddle , oder Sie können die Ausgabe des folgenden Snippets in Ihrer Konsole anzeigen:
quelle
Anhand eines der obigen Beispiele habe ich Folgendes gefunden:
Es funktioniert für mich, weil es den Randfall
.trim()
behandelt, in dem der erste Buchstabe groß geschrieben wird und Sie am Ende ein zusätzliches Leerzeichen haben.Referenz: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Trim
quelle
Ok, ich bin ein paar Jahre zu spät zum Spiel, aber ich hatte eine ähnliche Frage und wollte für jede mögliche Eingabe eine Lösung mit einem Ersatz erstellen. Ich muss @ZenMaster in diesem Thread und @Benjamin Udink ten Cate in diesem Thread den größten Teil der Ehre erweisen . Hier ist der Code:
Es gibt drei Klauseln, die alle Lookahead verwenden , um zu verhindern, dass die Regex-Engine zu viele Zeichen verbraucht:
[A-Z](?=[A-Z][a-z])
sucht nach einem Großbuchstaben, gefolgt von einem Großbuchstaben und einem Kleinbuchstaben. Dies soll Akronyme wie USA beenden.[^A-Z](?=[A-Z])
sucht nach einem Nicht-Großbuchstaben, gefolgt von einem Großbuchstaben. Dies beendet Wörter wie myWord und Symbole wie 99Bottles.[a-zA-Z](?=[^a-zA-Z])
sucht nach einem Buchstaben, gefolgt von einem Nicht-Buchstaben. Dies beendet Wörter vor Symbolen wie BFG9000.Diese Frage stand ganz oben in meinen Suchergebnissen, sodass ich hoffentlich anderen Zeit sparen kann!
quelle
Hier ist meine Version davon. Vor jedem englischen Großbuchstaben, der nach einem englischen Kleinbuchstaben steht, wird ein Leerzeichen eingefügt, und bei Bedarf wird auch der erste Buchstabe groß geschrieben:
Zum Beispiel:
thisIsCamelCase -> Dies ist
Kamelfall this IsCamelCase -> Dies ist
Kamelfall thisIsCamelCase123 -> Dies ist Kamelfall123
quelle
Diese Implementierung berücksichtigt aufeinanderfolgende Großbuchstaben und Zahlen.
quelle
Sie können eine Funktion wie diese verwenden:
Code mit einer Reihe von Testzeichenfolgen hier: http://jsfiddle.net/jfriend00/FWLuV/ .
Alternative Version, die hier führende Leerzeichen enthält: http://jsfiddle.net/jfriend00/Uy2ac/ .
quelle
" helloWorld"
beispielsweise nicht.Probieren Sie diese Bibliothek aus
http://sugarjs.com/api/String/titleize
quelle
Keine der obigen Antworten funktionierte perfekt für mich, daher musste ich mit einem eigenen Fahrrad kommen:
Testfälle:
quelle
Das funktioniert bei mir
quelle
string.replace(/([A-Z]+)/g, " $1").replace(/([A-Z][a-z])/g, "$1");
Ich denke, dies kann nur mit der Registrierung exp
/([a-z]|[A-Z]+)([A-Z])/g
und Ersatz gemacht werden"$1 $2"
.ILoveTheUSADope -> Ich liebe die USA Dope
quelle
QWERTY
wird zurückgegebenQWERT Y
.Wenn Sie sich mit Capital Camel Case befassen, kann Ihnen dieses Snippet helfen. Außerdem enthält es einige Spezifikationen, sodass Sie sicher sein können, dass es Ihrem Fall entspricht.
Und Spezifikationen:
quelle
Ich habe nicht alle Antworten ausprobiert, aber die wenigen Lösungen, an denen ich herumgebastelt habe, entsprachen nicht allen meinen Anforderungen.
Ich konnte mir etwas einfallen lassen, das ...
quelle
Unten finden Sie einen Link, der die Zeichenfolge von Kamelfall zu Satz mit Regex demonstriert.
Eingang
myCamelCaseSTRINGToSPLITDemo
Ausgabe
my Camel Case STRING To SPLIT Demo
Dies ist Regex für die Konvertierung von Kamelfall in Satztext
mit
$1 $2
als Subsitution.Klicken Sie hier, um die Konvertierung in Regex anzuzeigen
quelle
Eingang javaScript
Output Java Script
quelle
Eine weitere Lösung basierend auf RegEx.
Erläuterung
Das obige RegEx besteht aus zwei ähnlichen Teilen, die durch den OR- Operator getrennt sind. Die erste Hälfte:
([A-Z])
- passt zu Großbuchstaben ...(?=[A-Z][a-z])
- gefolgt von einer Folge von Groß- und Kleinbuchstaben.Bei Anwendung auf die Sequenz FOo entspricht dies effektiv dem F- Buchstaben.
Oder das zweite Szenario:
([a-z])
- passt zu Kleinbuchstaben ...(?=[A-Z])
- gefolgt von einem Großbuchstaben.Bei Anwendung auf die Sequenz barFoo entspricht dies effektiv dem Buchstaben r .
Wenn alle Ersatzkandidaten gefunden wurden, müssen Sie sie als letztes durch denselben Buchstaben, aber mit einem zusätzlichen Leerzeichen ersetzen. Dies können wir
'$& '
als Ersatz verwenden, und es wird in eine übereinstimmende Teilzeichenfolge gefolgt von einem Leerzeichen aufgelöst.Beispiel
quelle
Hinzufügen einer weiteren ES6-Lösung, die mir besser gefallen hat, nachdem ich mit ein paar Gedanken oben nicht zufrieden war.
https://codepen.io/902Labs/pen/mxdxRv?editors=0010#0
quelle