繁体   English   中英

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

[英]How to replace a character with an specific indexOf to uppercase in a 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());

但是,如何替换大写的“第二”字符?

我测试过

name=name.replace(/.$/, name[second].toUpperCase());

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

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

 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(/ [az]/, function (m0) { return m0.toUpperCase(); })); 

这个版本是相似的,但是不是寻找最后一个字符,而是寻找一个空格,后跟一个小写字母。


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

最后,我们在这里查找(并大写)所有以字符串开头或空格字符开头的非空格字符; 即我们用大写字母表示每个(以空格分隔)单词的开头。

您的错误是第二个字母不在第8 ,而是第7 同样这second = texten.indexOf(" ", first + 1); 给出-1 ,而不是8 ,因为字符串中没有两个空格。

如果您知道该字符串始终采用姓氏格式“ oneLetter”,并且希望将首字母和最后一个字母大写,则只需执行以下操作:

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

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

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

试试这个(如果有帮助,最好将常量移到其他地方,由于性能问题(是的,创建正则表达式不是很快)):

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM