![](/img/trans.png)
[英]Javascript: indexOf() & substr() not returning expected result on date string
[英]substr() not behaving as expected to concatenate string javascript
我正在尝试创建一个在驼峰式大小写中返回字符串的函数,该字符串在有连字符的情况下将每个字母大写。 即"this-should-be-camel-case"
"thisShouldBeCamelCase"
"this-should-be-camel-case"
将返回"thisShouldBeCamelCase"
。
我已将每个单词的首字母更改为大写,并将其删除为连字符,但无法获得完整的句子以返回。 我尝试使用substr
和substring
毫无用处,不确定它们是否是我要用于任务的内容。
在骆驼案中,我应该用什么来退还这句话? 我该怎么做呢 ? 谢谢
function camelCaseIt(str) {
for(var i = 0; i < str.length; i++) {
if(str[i] == '-') {
var chgLtr = str[i] = '';
var uprCase = str[i+1].toUpperCase();
}
}
return str;
}
alert(camelCaseIt('this-should-be-camel-cased'));
可以使用正则表达式相当简单地完成此操作:
function camelCaseIt(str) {
return str.replace(/-([a-z])?/g, function(v) { return (v.length > 1 ? v[1].toUpperCase() : ''); });
}
在您的函数中,您将返回原始(未修改的字符串)。 相反,您应该构建一个单独的(新)字符串并返回:
function camelCaseIt(str) {
var modifiedString = '';
for(var i = 0; i < str.length; i++) {
if(str.charAt(i) == '-') {
// hyphen; if there is another character, upper-case it and append
if ((i + 1) < str.length) {
modifiedString = str.charAt(i + 1).toUpperCase();
}
} else {
// normal character; append it as-is
modifiedString += str.charAt(i);
}
}
return modifiedString;
}
但是,您应该可以使用简单的正则表达式来完成相同的任务:
str = str.replace(/-([a-z])/g, function (match) {
return match[1].toUpperCase();
});
将字符串的字符当作一个字符数组进行索引可能无法在所有浏览器中使用(在EMCAScript 5之前是非标准行为)。 虽然它对于与最新JS标准兼容的浏览器是正确的,但如果要支持较旧的浏览器,则不应使用该语法。 (甚至在EMCAScript 5中,您也无法执行例如str[i] = ''
。)
function camelCaseIt(str) {
// create an array ['this', 'should', 'be', 'camel', 'cased']
var parts = str.split('-');
// start at i = 1 to skip the first word
for (var i = 1; i < parts.length; i++) {
// create an array ['s', 'h', 'o', 'u', 'l', 'd']
var ltrs = parts[i].split('');
// ltrs is now ['S', 'h', 'o', 'u', 'l', 'd']
ltrs[0] = ltrs[0].toUpperCase();
// parts is now ['this', 'Should', 'Be', 'Camel', 'Cased']
parts[i] = ltrs.join('');
}
// return thisShouldBeCamelCased
return parts.join('');
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.