2013-10-09 65 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