2016-11-03 2 views
-3

Ich habe eine Funktion, die den ersten Buchstaben jedes Wortes kapitalisiert:Anfangsbuchstabe Kapitalisierung Funktion Kapital auch nach Apostroph

function format(str){ 
    str = str.replace(/\b[a-z]/g, function(letter) { 
     return letter.toUpperCase(); 
    }); 
    return str; 
} 

Es ist auch nach einem Apostroph wird Kapital:

console.log(format("mark")); //Mark (correct) 
console.log(format("mark o'loughlan")); //Mark O'Loughlan (correct) 
console.log(format("mark's audi")); //Mark'S Audi (incorect) 

Idealerweise ich D mag es, nach einem Apostroph groß zu schreiben, wenn es ein Name ist (Beispiel 2), aber nicht für (Beispiel 3). Wie kann ich das beheben? Fiddle here

Edit: Ich glaube nicht, das ist ein Duplikat this question ist, wie ich nicht ‚s Kapital aber nach anderen Apostroph das ist in Ordnung, speziell bin gefragt.

+2

(http://stackoverflow.com/questions/2332811/capitalize-words-in-string) – ASDFGerte

+0

@Soviut Ich bin hoffnungslos in regex [Worte Kapital], so dass ich habe keine Ahnung, wo ich anfangen soll! Es ist kompliziert, denn wenn der Ausdruck nur _'s_ ist, dann sollte es nicht groß geschrieben werden, sonst sollte es. – Brad

+0

@ASDFGerte, danke für den Link, aber es scheint nicht die Differenzierung zu bieten, die ich für die Szenarien brauche, die ich skizziere, es sei denn, ich verpasse etwas? – Brad

Antwort

2

Leider Javascript Regex hat keine lookbehind Syntax, um alles in einem Regex zu tun, jedoch können Sie es in zwei Schritten tun. Großschreibung, wie Sie jetzt sind, aber dann Kleinbuchstaben 'S nach der Tat.

var strings = [ 
    "mark", 
    "mark o'loughlan", 
    "mark's audi" 
] 

var returnValue = ""; 
function format(str){ 
    str = str.replace(/\b[a-z]/g, function(letter) { return letter.toUpperCase(); }); 
    str = str.replace(/'(S)/g, function(letter) { return letter.toLowerCase(); }); 
    return str; 
} 

strings.forEach(function(string){ 
    console.log(format(string)); 
}); 
+0

Super! Danke @ppovoski! Ich habe gerade die zweite Zeile von '/ '(S)/g in' /' (S)/g geändert, um den Raum zu erfassen. Auf diese Weise wird ein Name wie o'sullivan immer noch großgeschrieben. Prost Kumpel – Brad