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.

23
demandé sur user113215 2011-06-06 15:38:09

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
18
répondu Kobi 2011-06-06 11:42:51

+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"
17
répondu NotNedLudd 2015-04-24 23:00:23

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])~'
5
répondu anubhava 2011-06-06 11:59:48

#([\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.

0
répondu Shadikka 2011-06-06 11:42:53

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
0
répondu Sedecimdies 2013-09-17 10:11:04