Estoy tratando de reemplazar 4 números con un formato de hora. Por ejemplo, si el usuario ingresa 1234 para ser reemplazado por 12:34
He encontrado que esta expresión regular hace este trabajo
let myString = "1234"; myString.replace(/\b(\d{2})(\d{2})/g, '$1:$2')Pero ahora estoy tratando de descubrir cómo usar esto con casos como
94: esto debe reemplazarse con 23, luego hace lo mismo para el tiempo después del colon
01:74 - esto debería ser reemplazado por 01:59
Encontré una expresión regular que hace eso ^([0-1]?[0-9]|2[0-3]):[0-5][0-9] , pero no puedo averiguar cómo para combinar esto con .replace
Deberá hacer coincidir el primer y el segundo par de dígitos y luego vincularlos por sus valores máximos. Una vez que tenga los valores acotados, puede rellenar los números y unirlos con dos puntos.
const toTimeString = (value) => { const [, hours, minutes] = value.match(/^(\d{2})(\d{2})$/), hour = `${Math.min(+hours, 24)}`.padStart(2, '0'), minute = `${Math.min(+minutes, 59)}`.padStart(2, '0'); return `${hour}:${minute}`; }; console.log(toTimeString('0174')); // 01:59 console.log(toTimeString('3412')); // 24:12Ahora, aquí hay un ejemplo de reemplazo:
const minPad = (value, min) => `${Math.min(value, min)}`.padStart(2, '0'); const toTimeString = (value) => value.replace(/\b(\d{2})(\d{2})\b/g, (match, hours, minutes) => `${minPad(hours, 24)}:${minPad(minutes, 59)}`); console.log(toTimeString('0174 3412')); // 01:59 24:12Hay una sobrecarga de replace que toma una función que puede usar para hacer cualquier lógica que necesite, como:
let myString = "1234"; function formatTime(input){ return input.replace(/\b(\d{2})(\d{2})/, (_,hh,mm) => { return `${Math.min(hh,24)}:${Math.min(mm,59)}` }) } console.log(formatTime("1234")); console.log(formatTime("3412")); console.log(formatTime("0174"));No veo ninguna buena razón para usar expresiones regulares en su caso.
Solo una función simple hará el trabajo.
function transformTextToHHMMTimeFormat(text) { const firstNumber = Number(text.slice(0, 2)) const secondNumber = Number(text.slice(2, 4)) const hour = Math.min(firstNumber, 24) const minute = Math.min(secondNumber, 59) return `${hour}:${minute}` }