3 回答
TA贡献1946条经验 获得超4个赞
查看您的代码,只需两个replace调用即可实现:
function camelize(str) {
return str.replace(/(?:^\w|[A-Z]|\b\w)/g, function(word, index) {
return index == 0 ? word.toLowerCase() : word.toUpperCase();
}).replace(/\s+/g, '');
}
camelize("EquipmentClass name");
camelize("Equipment className");
camelize("equipment class name");
camelize("Equipment Class Name");
// all output "equipmentClassName"
编辑:或只需单击一次replace,即可在中捕获空白RegExp。
function camelize(str) {
return str.replace(/(?:^\w|[A-Z]|\b\w|\s+)/g, function(match, index) {
if (+match === 0) return ""; // or if (/\s+/.test(match)) for white spaces
return index == 0 ? match.toLowerCase() : match.toUpperCase();
});
}
TA贡献1802条经验 获得超6个赞
如果有人在使用lodash,则有一个_.camelCase()功能。
_.camelCase('Foo Bar');
// → 'fooBar'
_.camelCase('--foo-bar--');
// → 'fooBar'
_.camelCase('__FOO_BAR__');
// → 'fooBar'
TA贡献1798条经验 获得超3个赞
我刚结束这样做:
String.prototype.toCamelCase = function(str) {
return str
.replace(/\s(.)/g, function($1) { return $1.toUpperCase(); })
.replace(/\s/g, '')
.replace(/^(.)/, function($1) { return $1.toLowerCase(); });
}
我试图避免将多个replace语句链接在一起。在我的函数中有$ 1,$ 2,$ 3的东西。但是这种类型的分组很难理解,而您对跨浏览器问题的提及也是我从未想过的。
添加回答
举报