将短划分的string转换为camelCase?

例如,假设我总是有一个由“ – ”分隔的string。 有没有办法改变

它 – 是 – 一个伟大-日常

itIsAGreatDayToday

使用RegEx?

编辑为支持非小写input和Unicode)

 function camelCase(input) { return input.toLowerCase().replace(/-(.)/g, function(match, group1) { return group1.toUpperCase(); }); } 

有关MDN的“指定函数作为参数”文档,请参阅有关“replacecallback”的更多信息。

callback函数的第一个参数是完全匹配,后面的参数是正则expression式中的圆括号组(在这种情况下是连字符后面的字符)。

您可以在每个破折号( - )或string的开头之后匹配单词字符,也可以通过在每个单词边界( \b )之后匹配单词字符来简化:

 function camelCase(s) { return (s||'').toLowerCase().replace(/(\b|-)\w/g, function(m) { return m.toUpperCase().replace(/-/,''); }); } camelCase('foo-bar'); // => 'FooBar' camelCase('FOo-BaR-gAH'); // => 'FooBarGah' 

这是一个演示

 var test = 'It-is-a-great-day-today'; function camelize(str) { return str[0].toLowerCase() + str.replace(/-([az])/g, function(a, b) { return b.toUpperCase(); }).slice(1); } console.log(camelize(test)); 

这也应该工作:

 function camelCase(str) { return str.replace(/^.|-./g, function(letter, index) { return index == 0 ? letter.toLowerCase() : letter.substr(1).toUpperCase(); }); } 

而恕我直言,它是一点效率,因为我们不是整个inputstring转换为小写,然后转换为大写,如果需要。 此function只能将首字母转换为小写,然后将连字符后面的每个字符转换为大写。

http://jsfiddle.net/54ZcM/

 function camelCase(string) { return string.toLowerCase().replace(/(\-[a-zA-Z])/g, function($1) { return $1.toUpperCase().replace('-',''); }) } alert(camelCase('fOo-BarBA-fo')); 

我知道这个问题有点老,但是,

这是我的camelCase函数版本:

 var camelCase = (function () { var DEFAULT_REGEX = /[-_]+(.)?/g; function toUpper(match, group1) { return group1 ? group1.toUpperCase() : ''; } return function (str, delimiters) { return str.replace(delimiters ? new RegExp('[' + delimiters + ']+(.)?', 'g') : DEFAULT_REGEX, toUpper); }; })(); 

它处理所有以下边缘情况:

  • 在默认情况下会同时处理下划线和连字符(可以使用第二个参数进行configuration)
  • 带unicode字符的string
  • 以连字符或下划线结尾的string
  • 具有连续连字符或下划线的string

这是一个链接到现场testing: http : //jsfiddle.net/avKzf/2/

以下是testing结果:

  • input:“ab-cd-ef”,结果:“abCdEf”
  • input:“ab-cd-ef-”,结果:“abCdEf”
  • input:“ab-cd-ef–”,结果:“abCdEf”
  • input:“ab-cd – ef–”,结果:“abCdEf”
  • input:“–ab-cd – ef–”,结果:“AbCdEf”
  • input:“–ab-cd -__- ef–”,结果:“AbCdEf”

请注意,以分隔符开头的string在开头处会产生一个大写字母。 如果这不是你所期望的,你总是可以使用lcfirst。 如果你需要的话,这是我的第一

 function lcfirst(str) { return str && str.charAt(0).toLowerCase() + str.substring(1); } 

这工作很好,但有人可能能够清理它。

 var toCamelCase = function(str) { // Replace special characters with a space str = str.replace(/[^a-zA-Z0-9 ]/g, " "); // put a space before an uppercase letter str = str.replace(/([az](?=[AZ]))/g, '$1 '); // Lower case first character and some other stuff that I don't understand str = str.replace(/([^a-zA-Z0-9 ])|^[0-9]+/g, '').trim().toLowerCase(); // uppercase characters preceded by a space or number str = str.replace(/([ 0-9]+)([a-zA-Z])/g, function(a,b,c) { return b.trim() + c.toUpperCase(); }); return str; }; console.log(toCamelCase('hyphen~name~ format')); console.log(toCamelCase('hyphen.name.format')); console.log(toCamelCase('hyphen-name-format')); console.log(toCamelCase('Hyphen-Dame-Gormat')); console.log(toCamelCase('EquipmentClass name')); console.log(toCamelCase('Equipment className')); console.log(toCamelCase('equipment class name')); console.log(toCamelCase(' e Equipment Class Name')); console.log(toCamelCase('under9score_name_format')); console.log(toCamelCase('Enderscore_name_format')); console.log(toCamelCase('EnderscoreBameFormat')); console.log(toCamelCase('_EnderscoreBameFormat')); 

http://jsbin.com/yageqi/1/edit?js,console

 var string = "it-is-a-great-day-today"; or var string = "it_is_a_great_day_today"; var regex = /(_|-)([az])/g; string.toLowerCase().replace(regex, toCamelCase ); function toCamelCase( string ){ return string[1].toUpperCase(); } Output: "itIsAGreatDayToday"; 

这里是你可以玩jsfiddle来testing这个http://jsfiddle.net/5n84w/2/

“`

 /** * Function to convert any string to camelCase * var regex = 'chetan-Ankola###.com---m13ok#-#alo(*finding!R%S#%-GFF'; * Where [-_ .] is the seperator, you can add eg: '@' too * + is to handle repetition of seperator * ? is to take care of preceeding token * match nov(ember)? matches nov and november */ var camelCaser = function (str) { var camelCased = str.replace(/[-_ .]+(.)?/g, function (match, p) { if (p) { return p.toUpperCase(); } return ''; }).replace(/[^\w]/gi, ''); return camelCased; }; 

“`

 'it-is-a-great-day-today'.split('-').map(function(x,i){ return (i?x[0].toUpperCase():x[0]) + x.slice(1).toLowerCase() }).join('') 

结果:

 'itIsAGreatDayToday' 

或者, .match(/\w+/g)而不是.split('-') – 取决于你想在边缘情况下做什么,比如“这是一个testing”。

另一种使用reduce的方法:

 function camelCase(str) { return str .split('-') .reduce((a, b) => a + b.charAt(0).toUpperCase() + b.slice(1)); } 
 $scope.toCamelCase = function(arg){ var arg = arg.toLowerCase(); var arr = arg.split(""); arr[0] = arr[0].toUpperCase(); return arr.join(""); };