如何将特定indexOf的字符替换为字符串中的大写?

时间:2017-01-06 11:27:00

标签: javascript string

我试图将特定indexOf处的字符替换为大写。 我的字符串是姓氏加上姓氏的第一个字母, 看起来像这样:"lovisa t"

我用这个检查位置,它给了我在字符串中的正确位置。所以第二个给了我8个(在这种情况下)。

first = texten.indexOf(" ");
second = texten.indexOf(" ", first + 1);

然后我将第一个字母替换为大写字母。

var name = texten.substring(0, second);
name=name.replace(/^./, name[0].toUpperCase());

但是如何将“second”中的字符替换为大写?

我用

进行了测试
name=name.replace(/.$/, name[second].toUpperCase());

但它没有用,所以任何输入都非常感谢,谢谢。

4 个答案:

答案 0 :(得分:0)

这是一个完全符合您的问题标题要求的版本:它在字符串中大写特定索引。

function upperCaseAt(str, i) {
    return str.substr(0, i) + str.charAt(i).toUpperCase() + str.substr(i + 1);
}

var str = 'lovisa t';
var i = str.indexOf(' ');
console.log(upperCaseAt(str, i + 1));

但是,如果要在字符串中查找特定模式,则无需处理索引。

var str = 'lovisa t';
console.log(str.replace(/.$/, function (m0) { return m0.toUpperCase(); }));

此版本使用正则表达式查找字符串中的最后一个字符,并使用替换函数来匹配匹配。

var str = 'lovisa t';
console.log(str.replace(/ [a-z]/, function (m0) { return m0.toUpperCase(); }));

此版本类似,但它不是寻找最后一个字符,而是查找空格后跟小写字母。

var str = 'lovisa t';
console.log(str.replace(/(?:^|\s)\S/g, function (m0) { return m0.toUpperCase(); }));

最后,我们在这里寻找(和大写)所有以空格字符开头或空格字符开头的非空格字符;即我们将每个(以空格分隔的)单词的开头大写。

答案 1 :(得分:0)

您的错误是第二个字母不在8位置,而是7。 此second = texten.indexOf(" ", first + 1);也提供-1,而非8,因为您的字符串中没有两个空格。

如果您知道该字符串始终采用 surname space oneLetter 格式,并且您希望将第一个字母和最后一个字母大写,则可以执行此操作:



var name = 'something s';
name = name[0].toUpperCase() + name.substring(1, name.length - 1) + name[name.length -1].toUpperCase();
   
console.log(name)




答案 2 :(得分:0)

所有这些都可以通过正则表达式替换来完成。

"lovisa t".replace(/(^|\s)\w/g, s=>s.toUpperCase());

答案 3 :(得分:-1)

尝试这个(如果它会有帮助,更好地将常量移动到其他地方,因为性能问题(是的,正则表达式创建并不快)):

function normalize(str){
            var LOW_DASH = /\_/g;
            var NORMAL_TEXT_REGEXP = /([a-z])([A-Z])/g;
            if(!str)str = '';
            if(str.indexOf('_') > -1) {
                str = str.replace(LOW_DASH, ' ');
            }
            if(str.match(NORMAL_TEXT_REGEXP)) {
                str = str.replace(NORMAL_TEXT_REGEXP, '$1 $2');
            }
            if(str.indexOf(' ') > -1) {
                var p = str.split(' ');
                var out = '';
                for (var i = 0; i < p.length; i++) {
                    if (!p[i])continue;
                    out += p[i].charAt(0).toUpperCase() + p[i].substring(1) + (i !== p.length - 1 ? ' ' : '');
                }
                return out;
            } else {
                return str.charAt(0).toUpperCase() + str.substring(1);
            }
        }

console.log(normalize('firstLast'));//First Last
console.log(normalize('first last'));//First Last
console.log(normalize('first_last'));//First Last