JS中的字符串修改问题
String modification issue in JS
我有一个类似"word_count"的字符串。如何使用JavaScript以优雅的方式将其转换为"WordCount"?我觉得我的决定太复杂了。我将非常感谢你的帮助。
function titleCase(str)
{
return str.split("_")
.map(function (s) { return s.charAt(0).toUpperCase() + s.slice(1); })
.join("");
}
看看这个。我不想把所有东西都复制粘贴到这里,但这似乎正是你想要的。
以下是根据您的要求修改的功能:
String.prototype.toCamel = function(){
return this.replace(/((^|'_)[a-z])/g, function($1){
return $1.toUpperCase().replace('_','');});
};
它在这里发挥作用。
您可以使用正则表达式来匹配字符串开头的字母或下划线后面的字母,并使用回调将字母转换为大写:
s = s.replace(/(?:^|_)([a-z])/g, function(m, g){
return g.toUpperCase();
});
演示:http://jsfiddle.net/Guffa/ByU6P/
简单,如下所示:
var string = "word_count".split("_");
for(var i = 0; i<string.length;i++) {
string[i] = string[i].charAt(0).toUpperCase() + string[i].substr(1);
}
var myNiceString = string.join();
如果你想把它添加到String对象中,你可以这样做:
String.prototype.titleCase = function() {
var split = this.split("_");
for(var i = 0; i<split.length;i++) {
split[i] = split[i].charAt(0).toUpperCase() + split[i].substr(1);
}
return split.join("");
}
您可以将其称为"word_count".titleCase();
您可以使用如下函数:
var Pascalize = function(word) {
var x = word;
result = '';
if(-1 != word.indexOf('_')) {
x = word.split('_');
for(var i=0;i<x.length;i++) {
result += x[i].substr(0, 1).toUpperCase() + x[i].substr(1);
}
}
if('' == result) { result = word; }
return result;
};
var PascalCaseString = Pascalize("this_is_a_test");
// PascalCaseString value is now 'ThisIsATest'
下面是一个工作示例
var str = "word_count";
var re = /'b(.)([^_]+)_(.)/;
var newWord = str.replace(re, function(m,f,t,l){ return f.toUpperCase() + t + l.toUpperCase();})
console.log(newWord);
使用jQuery,您可以执行以下操作:
var result = '';
$.each('word_count'.split('_'), function(idx,elem){
result = result + elem.substr(0,1).toUpperCase() + elem.substr(1);
});
新版本(适用于任何数量的_
):
function fixString(sString) {
var aWords = sString.split("_"),
sResults = "";
for (var i in aWords)
sResults += aWords[i].charAt(0).toUpperCase() + aWords[i].slice(1);
return sResults;
}
压缩形式:
function fixString(c){var d=c.split("_"),a="";for(var b in d){a+=d[b].charAt(0).toUpperCase()+d[b].slice(1)}return a};
旧:
function fixString(sString) {
return sString.replace(/(.*)_(.*)/, function(sWhole, $1, $2, sWTF) {
return ucfirst($1) + ucfirst($2);
} )
function ucfirst (str) {
str += '';
var f = str.charAt(0).toUpperCase();
return f + str.substr(1);
}
}
或压缩版本:
function fixString(b){return b.replace(/(.*)_(.*)/,function(e,c,f,d){return a(c)+a(f)});function a(d){d+="";var c=d.charAt(0).toUpperCase();return c+d.substr(1)}};
当然,这与fixString("word_count")
一样使用,从而产生所需的WordCount
。
我看了所有的答案,但没有一个答案符合我的要求。我想要一个幂等函数,它转换为camelCase(而不是PascalCase),我喜欢String原型扩展方法(尽管显然这并不总是最好的药物)。
不管怎样,我的结局是:
String.prototype.camelize = function(){
var pascalCase = this.replace(/((^|'_)[a-z])/g, function($1){
return $1.toUpperCase().replace('_','');
});
return pascalCase.charAt(0).toLowerCase() + this.slice(1);
};
var aStringLike = "word_count";
// magic follows
aStringLike = "WordCount";
相关文章:
- 在指令控制器中使用$attrs时出现问题
- 将PHP变量传递给jQuery时遇到问题
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- 参数变量出现ngTable指令问题
- 剑道网格jQuery动画()问题
- 我的jQuery插件参数没有正确启动,遇到了问题
- Phonegap-(安卓/iphone)多个图像的图像库出现问题
- jQuery UI自动完成-修改问题
- 保留未修改的dom节点副本问题
- Jquery Search常见问题解答-轻微修改
- JS中的字符串修改问题
- 使用JavaScript/jQuery修改DOM的可访问性问题
- 我创建了一个测试,修改了我在网上找到的代码,但我有一个小问题
- JavaScript 304未修改问题
- 如果效率是一个问题,如何修改JavaScript修剪函数?
- 在span内修改链接时出现问题
- 修改文本框时的问题处理
- 在Highchart中动态修改yAxis极值时出现问题
- 大量使用ajax的问题-如何在页面上呈现html最初和后来,因为它被修改
- 目标转换问题-变量修改