2013-06-16 13 views
5

Ich versuche eine Bindestrich in CamelCase String zu konvertieren. Ich folgte diesem Beitrag: Convert hyphens to camel case (camelCase)Bindestrich in CamelCase konvertieren

(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 

Warum ich bin immer noch der Ausgabezeichenfolge den Strich zu bekommen?

+0

Sie tun falsch verstanden, was in der Ersetzungsfunktion verwendet wurde, Array-Indizes in JavaScript bei 0 beginnen :) –

Antwort

7

sollten Sie ersetzen first mit second:

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

Sie können prüfen, was Argument clojure.string/upper-case von println zum Einfügen von Code bekommt:

(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))))) 

Wenn Sie den obigen Code ausführen, ist das Ergebnis:

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

Das erste Element des Vektors ist die übereinstimmende Zeichenfolge und die zweite die aufgezeichnete Zeichenfolge . Dies bedeutet, dass Sie second und nicht first verwenden sollten.

4

Falls Ihr Ziel nur ist, zwischen Fällen zu konvertieren, mag ich die camel-snake-kebab Bibliothek. ->CamelCase ist der fragliche Funktionsname.

1

von this thread inspiriert, könnten Sie auch

(use 'clojure.string) 

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