2011-01-27 15 views
6

Chcę dodać spację między małymi i wielkimi literami w jednym ciągu. Na przykład:Odstęp między małymi i dużymi literami w ciągu znaków w kodzie JavaScript

FruityLoops 
FirstRepeat 

Teraz chcę dodać spację między małymi i dużymi literami. Nie wiem, jak powinienem zacząć w JavaScript. Coś z substr lub wyszukiwania? Czy ktoś może mi pomóc?

+3

@close wyborca: Jak to jest dokładnie to duplikatem pytanie XSLT ?! –

Odpowiedz

3

coś prostego tak:

"LoL".replace(/([a-z])([A-Z])/g, "$1 $2") 

to może wystarczy;)

2

Można to zrobić za pomocą ręcznego wyszukiwania, ale może to być łatwiej z wyrażeń regularnych. Zakładając:

  • Wiesz, że zaczyna z kapitałem
  • Nie chcesz przestrzeń przed tego kapitału
  • Chcesz przestrzeń przed wszystkie kolejne stolice

Następnie:

function spacey(str) { 
    return str.substring(0, 1) + 
      str.substring(1).replace(/[A-Z]/g, function(ch) { 
     return " " + ch; 
    }); 
} 

alert(spacey("FruitLoops")); // "Fruit Loops" 

Live example

Bardziej efektywne wersja zainspirowana (ale różni się od) patrick's answer:

function spacey(str) { 
    return str.substring(0, 1) + 
      str.substring(1).replace(/([a-z])?([A-Z])/g, "$1 $2"); 
} 

alert(spacey("FruityLoops")); // "Fruity Loops" 
alert(spacey("FruityXLoops")); // "Fruity X Loops" 

Live example

+1

+1 będzie również działać ze słowami, takimi jak FruityJuicyLoops – Aly

+0

Jedyne rozwiązanie, które mogę znaleźć, które dotyczy sąsiednich wielkich liter !! +1, dobry panie. – Aaron

+0

Co to znaczy -/([a-z])? ([A-Z])/g, "1 $ 2 $" ??? Szukaj małych słów, które mają małą literę, a następnie duże. Mała jest opcjonalna. Umieścić spację między pierwszą grupą (mała litera) a drugą grupą (kapitałem)? – stack1

0

Opcja regexp wygląda najlepiej. Uzyskanie prawidłowego wyrażenia regularnego wydaje się być trudne.

Jest jeszcze jedna kwestia tu z bardziej skomplikowanych opcji, aby spróbować:

Regular expression, split string by capital letter but ignore TLA

+1

Większość tego wątku, do którego link się odnosi, jest specyficzny dla języka C# i nie będzie działał w JavaScript. –

Powiązane problemy