2011-10-05 25 views
5

El siguiente, aunque redundante, funciona perfectamente:El uso de reemplazar y expresiones regulares para capitalizar la primera letra de cada palabra de una cadena en JavaScript

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

y representa un "salto de fe", pero en la siguiente :

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

como resultado, cuando deseo de capitalizar primer carácter de cada palabra como:

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

no funciona. Tampoco lo hace,

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

porque probablemente capitaliza "$ 1" antes de sustituir el valor del grupo.

Quiero hacer esto en una sola línea, utilizando el método

+0

¿Por qué no utiliza el método '.toUpperCase()'? –

+1

Eso convierte todos los caracteres de una cadena en mayúsculas, y OP quiere convertir solo el primer carácter. – Pointy

+2

Podría usar su respuesta TopUpper con 'str.replace (/ \ b [a-z]/g, function() {return arguments [0] .toUpperCase()})' –

Respuesta

11

del prototipo capitalizar() Se puede pasar una función como segundo argumento de ".replace()":

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

Los argumentos la función es, primero, la coincidencia completa, y luego los grupos coincidentes. En este caso, solo hay un grupo ("palabra"). El valor de retorno de la función se usa como reemplazo.

+0

Gracias. ¿Pero cómo sabe JS que los dos argumentos para la función serán los que usted especificó? – Daud

+0

?? Uhh ... No entiendo la pregunta. JavaScript "sabe" porque así es como se especifica e implementa el método ".replace()". Si el segundo argumento es una función, el sistema de tiempo de ejecución lo llama con argumentos tomados del resultado de la coincidencia de expresiones regulares. – Pointy

+0

Quiero decir, revisé en la referencia de mozilla: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/replace y no mencionaron que ESTOS PARTICULARES resultados de la coincidencia de expresiones regulares se aprobarán cuando Se especifican 2 argumentos – Daud

Cuestiones relacionadas