2013-10-09 82 views
6

我已經編寫了駱駝套裝字符串的函數(要求是在單詞的開頭和每個連字符之後,以個人名字爲目標)啓動字符。現在讓駱駝開心駱駝大小寫轉換

function sadCamelize(input) { 
    return input.toLowerCase().replace(/([-\s])(.)/g, 
    function(match, separator, starter) { 
     return separator + starter.toUpperCase(); 
    }); 
} 

,我想使我的駱駝快樂所以,即使是字符串的第一個字符(不是後面的間隔也沒有連字符),就會被拋棄行動。 ,Id的EST代替:

洪卡 - 洪卡 - >洪卡 - 洪卡

我想獲得

洪卡 - 洪卡 - >洪卡 - 洪卡

目前我卡住了,可能是因爲煩惱。所有的駱駝都很沮喪,我也是如此。另外 - 我稱之爲傷心/快樂的駱駝(頭低/高)的正確命名是什麼?

回答

7
function happyCamelize(str) { 
    return str.replace(/([a-z])([a-z]+)/gi, function(_, $1, $2) { 
     // _: The entire matched string. not used here. 
     // $1: The first group. The first alphabet. 
     // $2: The second group. The rest alphabets. 
     return $1.toUpperCase() + $2.toLowerCase(); 
    }); 
} 

實施例的第一個元素:

happyCamelize('HONKA-HONKA') // "Honka-Honka" 

注意這段代碼不會改變單個字長。

happyCamelize('h') // => "h" 
happyCamelize('H') // => "H" 

如果你也想camelize單長字,使用/([a-z])([a-z]*)/gi

+1

單峯駱駝實際上 – mplungjan

+0

我不確定它爲什麼起作用,但不應該在大寫字母上失敗?如何知道正則表達式匹配「A-Z」? –

+0

@KonradViltersten,使用'i'標誌表示忽略大小寫; 'A-Z'匹配大寫字母,小寫字母。 – falsetru

4

這個醜陋的一個班輪做這項工作。

"HONKA-HONKA".toLowerCase().split(/\b/g).map(function(word) { return word[0].toUpperCase() + word.slice(1)}).join('') 

讓我爆發吧:

"HONKA-HONKA".toLowerCase().split(/\b/g).map(function(word) { 
    return word[0].toUpperCase() + word.slice(1); 
}).join(''); 

現在包裝成一個功能

function sadCamelize(str) { 
    return str.toLowerCase().split(/\b/g).map(function(word) { 
     return word[0].toUpperCase() + word.slice(1); 
    }).join(''); 
} 

下面是操作的順序:

  • 轉換一切爲小寫
  • 分裂由字(\b)
  • 地圖正則表達式的結果的每一部分,使得所述第一信變得 大寫
  • word.slice(1)刪除該數組
+0

@mplungjan感謝mdn的參考,但是評論或編輯會更有用。 –

2

您的問題的第一部分已由lukas回答,因此我會回答第二部分。

honkaHonka =駝峯

HonkaHonka = PascalCase

有其它變化和同義詞爲好。看到這裏:http://en.wikipedia.org/wiki/CamelCase#Variations_and_synonyms

+0

或單峯駝案或UpperCamelCase – mplungjan

+0

@mplungjan BumpyCaps或CamelCaps或HumpBack或InterCaps或WikiCase:http://en.wikipedia.org/wiki/CamelCase#Variations_and_synonyms – Abhitalks