Por primera vez, tengo la necesidad de manipular una cadena bastante en JS. Después de jugar, me he dado cuenta de lo fuera de control que puede llegar a ser. No soy un profesional de JS y supongo que hay una forma más limpia de lograr el resultado deseado.
Pregunta: ¿Es necesario editar la cadena de muestra x , como lo he hecho, o hay una mejor solución?
Mi objetivo es pasar de esto:
_postcode_pricing_manual_weekend_eveninga esto:Manual Weekend Evening:
const x = '_postcode_pricing_manual_weekend_evening'; // Original String console.log("Original:", x); var str = x.replace('_postcode_pricing_',''); // Strip prefix console.log('1:',str); var finalStr = str.replace(/_/g, ' '); // strip Underscores console.log('2:',finalStr); // Add ':' finalStr = finalStr += ':'; // Split into words array const words = finalStr.split(" "); // Loop array capitalise first letter of each word '[0]' for (let i = 0; i < words.length; i++) { words[i] = words[i][0].toUpperCase() + words[i].substr(1); } // Put array back together. console.log("Final output:",words.join(" "));Si por "combinar" te refieres a encadenar múltiples replace juntos, sí.
str = x.replace('_postcode_pricing_', '').replace(/_/g, ' ') + ':'
... es perfectamente aceptable.
Sí, puede encadenar métodos, siempre que el método anterior devuelva un tipo que implemente el siguiente método en una cadena.
En cuanto a su proceso, tiene cierta redundancia. Reemplaza los guiones bajos con espacios, pero luego descarta esos espacios con su llamada split() . Simplemente podría dividir en guiones bajos.
const x = '_postcode_pricing_manual_weekend_evening'; // Original String console.log("Original:", x); const words = x .replace('_postcode_pricing_','') // remove prefix .split("_") // split into words .map(word => word[0].toUpperCase() + word.slice(1)) // capitalize .join(" "); // rejoin console.log(`${words}:`); // final literal adding ':'Otra opción sería usar una expresión regular en el segundo reemplazo, pasando una devolución de llamada como segundo argumento para transformar cada carácter coincidente.
const x = '_postcode_pricing_manual_weekend_evening'; // Original String console.log("Original:", x); const parsedString = x .replace('_postcode_pricing','') .replace(/_(\w)/g, (_, firstChar, offset) => (offset > 0 ? ' ' : '') + firstChar.toUpperCase()); console.log(`${parsedString}:`);