Jak mogę przekonwertować ciąg, taki jak „helloThere” lub „HelloThere”, na „Hello There” w JavaScript?
javascript
regex
string
HajdarA
źródło
źródło
Odpowiedzi:
wielką literę - jako przykład.
Zwróć uwagę na spację w
" $1"
.EDYCJA: dodano przykład wielkiej pierwszej litery. Oczywiście, jeśli pierwsza litera jest już duża - miałbyś wolne miejsce do usunięcia.
źródło
text.replace
, dopełniam wywołania funkcji 2+ argumentami spacjami również dla czytelnościNon-GoogleChrome
?Alternatywnie za pomocą lodash :
Przykład:
Lodash jest w porządku biblioteka dać skrót do wielu codziennych js tasks.There wiele innych podobnych funkcji ciąg manipulacji, takich jak
camelCase
,kebabCase
etc.źródło
hello world
wyjście powinno wyglądać takHello There
, w tym przypadku loadash nie będzie pomocny.hello world
naHello World
lodash.com/docs/4.17.15#upperFirsthello there
dohello world
.Miałem podobny problem i poradziłem sobie z tym tak:
Aby uzyskać bardziej solidne rozwiązanie:
http://jsfiddle.net/PeYYQ/
Wejście:
Wynik:
źródło
Przykład bez skutków ubocznych.
W ES6
źródło
Najlepszym ciągiem, jaki znalazłem do testowania funkcji z wielbłąda do przypadku, jest ten absurdalnie bezsensowny przykład, który testuje wiele przypadków skrajnych. O ile wiem, żadna z wcześniej opublikowanych funkcji nie obsługuje tego poprawnie :
ToGet YourGEDInTimeASongAboutThe26ABCsIsOfTheEssenceButAPersonalIDCardForUser456InRoom26AContainingABC26TimesIsNotAsEasyAs123ForC3POOrR2D2Or2R2D
Należy to przekonwertować na:
Aby uzyskać GED na czas Piosenka o 26 ABC jest najważniejsza, ale osobisty dowód tożsamości dla użytkownika 456 w pokoju 26A zawierający ABC 26 razy nie jest tak łatwy jak 123 dla C3PO lub R2D2 lub 2R2D
Jeśli potrzebujesz tylko prostej funkcji, która obsługuje przypadki takie jak ta powyżej (i więcej przypadków niż wiele wcześniejszych odpowiedzi), oto ta, którą napisałem. Ten kod nie jest szczególnie elegancki ani szybki, ale jest prosty, zrozumiały i działa.
Przykład do uruchomienia online znajduje się na jsfiddle lub możesz wyświetlić dane wyjściowe fragmentu kodu poniżej w konsoli:
źródło
Na podstawie jednego z powyższych przykładów wymyśliłem to:
Działa dla mnie, ponieważ używa
.trim()
do obsługi przypadku krawędzi, w którym pierwsza litera jest wielka, a kończy się dodatkową spacją wiodącą.Źródła: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Trim
źródło
Ok, spóźniłem się o kilka lat do gry, ale miałem podobne pytanie i chciałem zrobić jedno zastępcze rozwiązanie dla każdego możliwego wejścia. Większość zasług należy przypisać @ZenMaster w tym wątku i @Benjamin Udink ten Cate w tym wątku. Oto kod:
Zawiera trzy klauzule, z których wszystkie używają lookahead, aby silnik regex nie zużywał zbyt wielu znaków:
[A-Z](?=[A-Z][a-z])
szuka dużej litery, po której następuje wielka, a następnie mała litera. To koniec akronimów takich jak USA.[^A-Z](?=[A-Z])
szuka litery innej niż duża, po której następuje duża litera. To kończy słowa takie jak myWord i symbole takie jak 99Bottles.[a-zA-Z](?=[^a-zA-Z])
szuka litery, po której następuje nieliter. To kończy słowa przed symbolami takimi jak BFG9000.To pytanie było u góry moich wyników wyszukiwania, więc mam nadzieję, że zaoszczędzę innym trochę czasu!
źródło
Oto moja wersja. Dodaje spację przed każdą angielską literą UpperCase, która występuje po małej angielskiej literze, a także w razie potrzeby zamienia wielką literę na wielką:
Na przykład:
thisIsCamelCase -> This Is Camel Case
this IsCamelCase -> This Is Camel Case
thisIsCamelCase123 -> This Is Camel Case123
źródło
Ta implementacja bierze pod uwagę kolejne wielkie litery i cyfry.
źródło
Możesz użyć takiej funkcji:
Kod z wieloma ciągami testowymi tutaj: http://jsfiddle.net/jfriend00/FWLuV/ .
Alternatywna wersja, która zachowuje wiodące spacje tutaj: http://jsfiddle.net/jfriend00/Uy2ac/ .
źródło
" helloWorld"
.wypróbuj tę bibliotekę
http://sugarjs.com/api/String/titleize
źródło
Żadna z powyższych odpowiedzi nie działała idealnie dla mnie, więc musiałem przyjechać z własnym rowerem:
Przypadki testowe:
źródło
To działa dla mnie, sprawdź to
źródło
string.replace(/([A-Z]+)/g, " $1").replace(/([A-Z][a-z])/g, "$1");
Myślę, że można to zrobić tylko z reg exp
/([a-z]|[A-Z]+)([A-Z])/g
i wymianą"$1 $2"
.ILoveTheUSADope -> I Love The USA Dope
źródło
QWERTY
zwracaQWERT Y
.Jeśli masz do czynienia z Capital Camel Case, ten fragment może ci pomóc, zawiera również pewne specyfikacje, dzięki czemu możesz być pewien, że pasuje do twojego przypadku.
I specyfikacje:
źródło
Nie wypróbowałem odpowiedzi wszystkich, ale kilka rozwiązań, przy których majstrowałem, nie spełniało wszystkich moich wymagań.
Udało mi się wymyślić coś, co ...
źródło
Poniżej znajduje się link, który demonstruje ciąg znaków wielbłąda w ciągu zdań przy użyciu wyrażenia regularnego.
Wejście
myCamelCaseSTRINGToSPLITDemo
Wynik
my Camel Case STRING To SPLIT Demo
To jest wyrażenie regularne do konwersji wielkości wielbłąda na tekst zdania
z
$1 $2
jak subsitution.Kliknij, aby wyświetlić konwersję na wyrażeniu regularnym
źródło
Wprowadź javaScript
Wyjście Java Script
źródło
Jeszcze jedno rozwiązanie oparte na RegEx.
Wyjaśnienie
Powyższe wyrażenie regularne składa się z dwóch podobnych części oddzielonych operatorem OR . Pierwsza połowa:
([A-Z])
- dopasowuje wielkie litery ...(?=[A-Z][a-z])
- po którym następuje sekwencja wielkich i małych liter.Po zastosowaniu do sekwencji FOo , efektownie pasuje do jej litery F.
Lub drugi scenariusz:
([a-z])
- dopasowuje małe litery ...(?=[A-Z])
- po której następuje wielka litera.Po zastosowaniu do sekwencji barFoo , efektywnie dopasowuje to literę r .
Po znalezieniu wszystkich kandydatów do zamiany ostatnią rzeczą do zrobienia jest zastąpienie ich tą samą literą, ale dodatkową spacją. W tym celu możemy użyć go
'$& '
jako zamiennika i zostanie rozwiązany do dopasowanego podciągu, po którym następuje znak spacji.Przykład
źródło
Dodanie kolejnego rozwiązania ES6, które podobało mi się bardziej, ponieważ nie byłem zadowolony z kilku myśli powyżej.
https://codepen.io/902Labs/pen/mxdxRv?editors=0010#0
źródło