2013-06-16 18 views
5

Próbuję przekonwertować łączony ciąg znaków na ciąg znaków CamelCase. Poszedłem za tego posta: Convert hyphens to camel case (camelCase)Konwertowanie łączonego ciągu znaków na CamelCase

(defn hyphenated-name-to-camel-case-name [^String method-name] 
    (clojure.string/replace method-name #"-(\w)" 
          #(clojure.string/upper-case (first %1)))) 


(hyphenated-name-to-camel-case-name "do-get-or-post") 
==> do-Get-Or-Post 

Dlaczego ja wciąż coraz kreskę ciąg wyjściowy?

+0

Ty misread co był używany w funkcji zastępczej, indeksy tablicy w JavaScript zaczynają się od 0 :) –

Odpowiedz

7

Należy zastąpić first z second:

(defn hyphenated-name-to-camel-case-name [^String method-name] 
    (clojure.string/replace method-name #"-(\w)" 
          #(clojure.string/upper-case (second %1)))) 

Można sprawdzić co argumentem clojure.string/upper-case dostaje wkładając println do kodu:

(defn hyphenated-name-to-camel-case-name [^String method-name] 
    (clojure.string/replace method-name #"-(\w)" 
          #(clojure.string/upper-case 
          (do 
           (println %1) 
           (first %1))))) 

Po uruchomieniu powyższego kodu, wynik jest:

[-g g] 
[-o o] 
[-p p] 

Pierwszym elementem wektora jest dopasowany ciąg znaków, a drugi to przechwycony ciąg, , co oznacza, że ​​powinieneś użyć second, a nie first.

4

Jeśli twoim celem jest konwersja pomiędzy przypadkami, bardzo podoba mi się biblioteka camel-snake-kebab. ->CamelCase to nazwa funkcji, o której mowa.

1

zainspirowany this thread, można również zrobić

(use 'clojure.string) 

(defn camelize [input-string] 
    (let [words (split input-string #"[\s_-]+")] 
    (join "" (cons (lower-case (first words)) (map capitalize (rest words)))))) 
Powiązane problemy