2011-10-05 15 views
5

Di seguito, anche se ridondante, funziona perfettamente:Utilizzando sostituire e regex di capitalizzare prima lettera di ogni parola di una stringa in JavaScript

'leap of, faith'.replace(/([^ \t]+)/g,"$1");

e stampe "salto della fede", ma nel seguente :

'leap of, faith'.replace(/([^ \t]+)/g,RegExp.$1); esso stampa "la fede fede fede"

di conseguenza quando voglio capitalizzare primo carattere di ogni parola come:

'leap of, faith'.replace(/([^ \t]+)/g,RegExp.$1.capitalize());

non funziona. Né fa,

'leap of, faith'.replace(/([^ \t]+)/g,"$1".capitalize);

perché probabilmente si capitalizza "$ 1" prima di sostituire il valore del gruppo.

che voglio fare questo in una sola riga con il metodo

+0

Perché non usi il metodo '.toUpperCase()'? –

+1

Converte tutti i caratteri in una stringa in maiuscolo e l'OP vuole convertire solo il primo carattere. – Pointy

+2

Puoi usare toUpper + la tua risposta con 'str.replace (/ \ b [a-z]/g, function() {return arguments [0] .toUpperCase()})' –

risposta

11

prototipo capitalizzare() È possibile passare una funzione come secondo argomento di ".Rimontare()":

"string".replace(/([^ \t]+)/g, function(_, word) { return word.capitalize(); }); 

Gli argomenti la funzione sono, in primo luogo, l'intera corrispondenza e quindi i gruppi corrispondenti. In questo caso c'è solo un gruppo ("parola"). Il valore di ritorno della funzione viene utilizzato come sostituzione.

+0

Grazie. Ma come fa JS a sapere che i due argomenti della funzione saranno quelli specificati? – Daud

+0

?? Uhh ... non capisco la domanda. JavaScript "sa" perché è proprio come viene specificato e implementato il metodo ".replace()". Se il secondo argomento è una funzione, il sistema runtime lo chiama con argomenti presi dal risultato della corrispondenza regex. – Pointy

+0

Voglio dire, ho controllato il riferimento a mozilla: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/replace e non hanno menzionato che QUESTI PARTICOLARI risultati della corrispondenza regex saranno passati quando 2 argomenti sono specificati – Daud

Problemi correlati