2016-10-18 6 views
1

私は文章を大文字にする関数を持っています。しかし、このようなJavaScriptで名前を大文字にする

D'agostino, Fred 
D'agostino, Ralph B. 
D'allonnes, C. Revault 
D'amanda, Christopher 

、などの名前を大文字にそのことはできません、私は期待してい:

D'Agostino, Fred 
D'Agostino, Ralph B. 
D'Allonnes, C. Revault 
D'Amanda, Christopher 

機能

getCapitalized(str){ 
    var smallWords = /^(a|an|and|as|at|but|by|en|for|if|in|nor|of|on|or|per|the|to|vs?\.?|via)$/i; 
    return str.replace(/[A-Za-z0-9\u00C0-\u00FF]+[^\s-]*/g, function (match, index, title) { 
     if (index > 0 && index + match.length !== title.length && 
     match.search(smallWords) > -1 && title.charAt(index - 2) !== ":" && 
     (title.charAt(index + match.length) !== '-' || title.charAt(index - 1) === '-') && 
     (title.charAt(index + match.length) !== "'" || title.charAt(index - 1) === "'") && 
     title.charAt(index - 1).search(/[^\s-]/) < 0) { 
     return match.toLowerCase(); 
     } 
     if (match.substr(1).search(/[A-Z]|\../) > -1) { 
     return match; 
     } 
     return match.charAt(0).toUpperCase() + match.substr(1); 
    }); 
    } 

を誰が私は問題を考え出す助けることができますか?私は(title.charAt(index + match.length) !== "'" || title.charAt(index - 1) === "'")を使用してみましたが、それは役に立ちません。

+0

あなたのコードの '' 'をテストする部分は現在、' 'smallWords'にマッチするものだけに適用されていませんか? – nnnnnn

+0

ああ私は今それを見る!ありがとう@nnnnnn –

+0

@nnnnnnこれに最適なソリューションはありますか? –

答えて

3

私はあなたがの世話をするために必要なすべてのユースケースについてはよく分からないんだけど、質問に対して、あなたは、単語の境界を探し、正規表現を使用することができ、質問:

function capitalizeName(name) { 
 
    return name.replace(/\b(\w)/g, s => s.toUpperCase()); 
 
} 
 

 
console.log(capitalizeName(`D'agostino, Fred`)); 
 
console.log(capitalizeName(`D'agostino, Ralph B.`)); 
 
console.log(capitalizeName(`D'allonnes, C. Revault`)); 
 
console.log(capitalizeName(`D'amanda, Christopher`));

関連する問題