Estoy tratando de crear una función que agregue un espacio entre "vuelo" y "###", pero me gustaría que funcione si el número de vuelo tiene más de 3 dígitos. Sé que podría hacer que la segunda parte del método de corte sea un gran número y técnicamente funcionaría, pero creo que debería haber una forma más elegante. ¡Cualquier ayuda será apreciada, gracias!
const addSpace = function (str) { const flightNumber = str.slice(6, 9); return [str.slice(0, 6) + ' ' + flightNumber] } console.log(...addSpace('flight843'));Puede hacer coincidir 6 caracteres az y 3 o más dígitos usando un patrón con 2 grupos de captura.
En el reemplazo use los 2 grupos de captura con un espacio en el medio.
const addSpace = str => str.replace(/\b([az]{6})(\d{3,})\b/g, "$1 $2"); console.log(addSpace('flight843'));También puede hacer coincidir literalmente el vuelo y agregar anclas si esa es la única cadena permitida.
^(flight)(\d{3,})$Como cuerda de flight siempre estará ahí. Simplemente podemos lograr esto usando el método String.replace() . También realicé la prueba de rendimiento en jsbench y funciona más rápido entre todas las soluciones mencionadas aquí.
Demostración en vivo :
const addSpace = function (str) { const len = str.replace('flight', '').length; return len > 3 ? str.replace('flight', 'flight ') : str } console.log(addSpace('flight843')); // 'flight843' console.log(addSpace('flight8432')); // 'flight 8432'Si solo necesita agregar espacio, creo que esta es una solución simple para su búsqueda. Con esta función dinámica es posible agregar espacio para muchos bloques de palabras.
/* ADD Spacing */ const string = "flightNumber"; const dataValue = "flight"; function addSpacing(str, data){ //Verify if exist the wolrd in the string if(str.includes(data)){ //get the word let word = str.substr(0, data.length); //Add Capitalise let strCapitalize = word.charAt(0).toUpperCase(); let cleanword = word.slice(1, +data.length); //add spacing let newStr = str.replace(word, strCapitalize + cleanword + " "); console.log(newStr); } } addSpacing(string, dataValue);