如何在JavaScript中使所有单词的第一个字符大写?

时间:2010-12-18 13:29:03

标签: javascript string

我搜索了解决方案但尚未找到。

我有以下字符串。

1. hello
2. HELLO
3. hello_world
4. HELLO_WORLD
5. Hello World

我想将它们转换为以下内容:

1. Hello
2. Hello
3. HelloWorld
4. HelloWorld
5. HelloWorld

如果字符串中没有空格和下划线,则首先是大写,而所有其他都是小写。如果单词由下划线或空格分隔,则每个单词的大写第一个字母,并删除空格和下划线。我怎么能用JavaScript做到这一点。

由于

5 个答案:

答案 0 :(得分:14)

这是一个正则表达式解决方案:

首先小写字符串:

 str = str.toLowerCase();

用大写字母替换所有_和空格以及单词中的第一个字符:

 str = str.replace(/(?:_| |\b)(\w)/g, function(str, p1) { return p1.toUpperCase()})

DEMO

更新更少步骤;)

说明:

/            // start of regex
 (?:         // starts a non capturing group
   _| |\b    // match underscore, space, or any other word boundary character 
             // (which in the end is only the beginning of the string ^)
  )          // end of group
 (           // start capturing group
  \w         // match word character
 )           // end of group
/g           // and of regex and search the whole string

捕获组的值在函数中以p1形式提供,整个表达式由函数的返回值替换。

答案 1 :(得分:10)

你可以这样做:

function toPascalCase(str) {
    var arr = str.split(/\s|_/);
    for(var i=0,l=arr.length; i<l; i++) {
        arr[i] = arr[i].substr(0,1).toUpperCase() + 
                 (arr[i].length > 1 ? arr[i].substr(1).toLowerCase() : "");
    }
    return arr.join("");
}

You can test it out here,方法非常简单,.split()在找到空格或下划线时将字符串放入数组中。然后循环遍历数组,将第一个字母置于上面,然后将其余部分置于其后...然后将标题 - 单词数组和.join()一起再次组合成一个字符串。

答案 2 :(得分:5)

function foo(str) {
    return $(str.split(/\s|_/)).map(function() {
        return this.charAt(0).toUpperCase() + this.slice(1).toLowerCase();
    }).get().join("");
}

工作演示: http://jsfiddle.net/KSJe3/3/ (我在演示中使用了Nicks正则表达式)


编辑:另一个版本的代码 - 我用$ .map()替换了map():

function foo(str) {
    return $.map(str.split(/\s|_/), function(word) {
        return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
    }).join("");
}

工作演示: http://jsfiddle.net/KSJe3/4/

答案 3 :(得分:0)

@NickCraver's answer的ES6 /功能更新。与@ NickCraver的答案一样,此函数将通过过滤它们来正确处理多个空格/下划线。

const pascalWord = x => x[0].toUpperCase() + x.slice(1).toLowerCase();

const toPascalCase2 = (str) => (
  str.split(/\s|_/)
    .filter(x => x)
    .map(pascalWord)
    .join('')
);

const tests = [
'hello',
'HELLO',
'hello_world',
'HELLO_WORLD',
'Hello World',
'HELLO__WORLD__',
'Hello   World_',
].map(toPascalCase2).join('<br>');

document.write(tests);

答案 4 :(得分:0)

var city = city.replace(/ \ s + / g,&#39;&#39;)//将所有空格替换为singele speace         city = city.replace(/ \ b \ w / g,city =&gt; city .toUpperCase())// speace letter convert capital