2014-07-23 34 views
1

找到解決方案很困難,有幾種解決方案。在JavaScript中將「Sentence case」轉換爲「camelCase」

我也考慮過用大寫形式的本身替換每個「」和下面的第一個字符:只有

value.toLowerCase().replace(/\s+/g, function (g) { return g[1].toUpperCase() }) 

,正則表達式/\ s +/G需要改變的第一個字符匹配。

如果有一個存在的問題就是這個,請提供鏈接,我會自己關閉它。我找不到SO


例子的解決方案:

「我走我的狗公園」或「我走我的狗公園」 =>「iWalkMyDogToThePark」

+0

你能提供預期結果的一個完整的例子嗎? –

+0

一個例子會更好。 –

回答

5

你需要捕捉下一個字符。您可以使用;或者(A-Z])

var toCamelCase = function(string){ 
    return string.replace(/\s+(.)/g, function (match, group) { 
    return group.toUpperCase() 
    }) 
} 
+0

不錯,這就是我一直在尋找和@lpg有同樣的解決方案,我會upvote。我不想有一個不必要的條件,謝謝這個正則表達式的改變。 – TaylorMac

0

您是否在尋找類似的東西:

var string = "Hello there what are You doing yes"; 
string.replace(/([A-Z])([a-z]+)\s+([a-z])([a-z]+)/g, function($1, $2, $3, $4, $5) { 
    return $2.toLowerCase() + $3 + $4.toUpperCase() + $5; 
}); 

這打印出"helloThere what are youDoing yes"

2

也許你可以這樣做:

function camelCase(value) { 
    return value.toLowerCase().replace(/\s+(.)/g, function(match, group1) { 
     return group1.toUpperCase(); 
    }); 
} 

(從here拍攝)

0

你可以使用這個駱駝大小寫轉換代碼(。):

function toCamelCase(str) { 
    return str.replace(/(?:^.|[A-Z]|\b.)/g, function(letter, index) { 
    return index == 0 ? letter.toLowerCase() : letter.toUpperCase(); 
    }).replace(/\s+/g, ''); 
} 

var val = toCamelCase("Sentence case"); 
//=> sentenceCase 

val = toCamelCase('hello how are you'); 
//=> helloHowAreYou 
0

我認爲一個簡單的解決方案可以在沒有正則表達式來實現。只需從空格中分割出字符串,然後將它們與適當的套管連接起來。

var value = '...'; 

var camelCase = value.split(' ').map(function(word, i) { 
    return (word[0] || '')[i == 0 ? 'toLowerCase' : 'toUpperCase']() + 
      word.substr(1).toLowerCase(); 
}).join(''); 

JSFiddle

+0

如果碰巧有雙空格,你將得到錯誤'「TypeError:不能讀屬性'toUpperCase'undefined」'。 [我知道這不是在上面的測試案例] – epascarello

+0

好點,更新我的解決方案。 –

+1

爲什麼要更換而不是僅僅分割一個或多個空間? '.split(/ \ S + /)' – epascarello

相關問題