2013-06-16 6 views
5

ハイフネーション文字列をCamelCase文字列に変換しようとしています。私はこの記事を踏襲:Convert hyphens to camel case (camelCase)ハイフネーション文字列を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 

私はまだダッシュ出力文字列を取得していますなぜ?

+0

を行うことができ、JavaScriptで配列のインデックスは0から始まります:) –

答えて

7

あなたはsecondfirstを交換する必要があります。

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

をあなたがコードにprintlnを挿入することにより取得するものを引数clojure.string/upper-case確認することができます。

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

あなたは上記のコードを実行すると、結果は次のとおりです。

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

ベクトルの最初の要素は一致した文字列で、2番目の要素はキャプチャされた文字列 です。つまり、firstではなくsecondを使用する必要があります。

4

あなたの目標がケース間で変換するだけの場合、私は実際にcamel-snake-kebabライブラリが好きです。 ->CamelCaseは問題の関数名です。 this threadに触発

1

、また、あなたは置換機能で使用されていたものを読み違え

(use 'clojure.string) 

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