Majuscule de la première lettre de chaque mot, aussi après un caractère spécial comme un tiret
j'ai utiliser ce #(s|^)([a-z0-9-_]+)#i
pour capitaliser chaque première lettre de chaque mot, je le veux aussi de capitaliser la lettre si c'est après une marque spéciale comme un tiret(-)
Maintenant il affiche:
This Is A Test For-stackoverflow
Et je veux que cela:
This Is A Test For-Stackoverflow
des suggestions/échantillons pour moi?
Je ne suis pas un pro, alors essayez de faire simple pour que je comprenne.
5 réponses
Une solution simple est d'utiliser les limites de mot:
#\b[a-z0-9-_]+#i
Alternativement, vous pouvez faire correspondre pour quelques caractères:
#([\s\-_]|^)([a-z0-9-_]+)#i
+1 pour les limites de mots, et voici une solution Javascript comparable. Cela représente pour les possessifs, ainsi:
var re = /(\b[a-z](?!\s))/g;
var s = "fort collins, croton-on-hudson, harper's ferry, coeur d'alene, o'fallon";
s = s.replace(re, function(x){return x.toUpperCase();});
console.log(s); // "Fort Collins, Croton-On-Hudson, Harper's Ferry, Coeur D'Alene, O'Fallon"
en fait, il n'est pas nécessaire de faire correspondre la chaîne complète à la première lettre sans majuscule comme ceci:
'~\b([a-z])~'
#([\s-]|^)([a-z0-9-_]+)#i
-(\s|^)
correspond à un caractère d'espacement (\s
) ou au début de la ligne (^
). Lorsque vous modifiez l' \s
[\s-]
, il correspond à tout caractère espace ou un tiret.
faire
R. E. A. C De Boeremeakers
R. E. A. c de boeremeakers
(?<=\A|[ .])(?<up>[a-z])(?=[a-z. ])
en utilisant
Dim matches As MatchCollection = Regex.Matches(inputText, "(?<=\A|[ .])(?<up>[a-z])(?=[a-z. ])")
Dim outputText As New StringBuilder
If matches(0).Index > 0 Then outputText.Append(inputText.Substring(0, matches(0).Index))
index = matches(0).Index + matches(0).Length
For Each Match As Match In matches
Try
outputText.Append(UCase(Match.Value))
outputText.Append(inputText.Substring(Match.Index + 1, Match.NextMatch.Index - Match.Index - 1))
Catch ex As Exception
outputText.Append(inputText.Substring(Match.Index + 1, inputText.Length - Match.Index - 1))
End Try
Next