2017-01-06 3 views
0

特定のindexOfの文字を大文字に置き換えようとしています。 私の文字列は、姓に姓の最初の文字を加えた文字で、 は"lovisa t"のようになります。文字列内の特定のindexOfで文字を大文字に置き換える方法はありますか?

これで位置を確認すると、文字列の中に正しい場所が表示されます。だから、2番目は私に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()); 

でテストしかし、それは仕事をdid'tので、任意の入力は本当に感謝、感謝。

+0

待って、これをやろうとしていますか? 'str.replace(/ [a-z] /、関数(m0){return m0.toUpperCase();})' – melpomene

+0

ありがとうございます。 –

+0

文中のすべての単語を大文字にする必要がありますか? – degr

答えて

0

エラーは2番目の文字が8ではありませんが、7です。 second = texten.indexOf(" ", first + 1);8ではなく、-1です。文字列に2つの空白がないためです。

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

+0

'name [...]'構文はInternet Explorerで動作しますか?私はそれに問題があることを覚えています(文字列は配列ではありません)。また、 '.substring'の代わりに' name.slice(1、-1) 'を実行することもできます。 – melpomene

+0

@melpomene IE6の後に動作します。それ以外の場合は、要素にアクセスするために 'charAt()'を使うだけで、すべてのブラウザで動作します。 – rpadovani

+0

ありがとう、うまくいきます。 –

-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 
+0

その機能はOPが要求しなかった多くのことを行います。最後の3つの 'if'文は冗長です。実際に正規表現マッチを行う前に正規表現がマッチするかどうかを確認する必要はありません。 'REMOVE_FIRST_LAST_SLASHES'は未使用です。 'LOW_DASH'は一度しか使われません。それはなぜそれ自身の変数を得るのですか?なぜあなたは正規表現で '_'をエスケープしていますか? – melpomene

+0

私の目的のためにすべてのケースをカバーしています。入力名を使用してフォーム入力ラベル生成に使用できます。時には名前がcamelCaseにあることもありますが、いつかはpython_tale_caseにあることもあります。この場合、私は正しい名前を得るでしょう。もちろん、キリル文字、日本文字、または中国語の単語で作業している場合は、正しく動作しないと思うでしょう。 – degr

+0

それは...本当に何も説明していない。なぜOPの質問に答えるのではなく、[あなたの目的のためにすべてのケースをカバーする]コードを提供していますか? – melpomene

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(); }));

、ここでは(と大文字化)文字列または空白文字の先頭に先行されているすべての非空白文字を探しています。つまり、各単語(スペース区切り)の先頭を大文字にしています。

+0

ありがとうございます。素晴らしい作品: –

+0

ようこそ。 :*)(これはちょうどupvoteボタンのためのものです: "*この答えは役に立ちます*") – melpomene

0
:あなたは、文字列が oneLetter形式 姓スペースに常にあることを知って、あなたが最初の文字と、あなたは、単にこれを行うことができ、最後の文字を大文字にしたい場合は

すべてはregex replaceで行うことができます。

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

関連する問題