Javascript - 正则表达式用 HH:MM 替换数字
Javascript - Regex replace number with HH:MM
我正在尝试用时间格式替换 4 个数字。例如,如果用户输入 1234 将替换为 12:34
我发现这个正则表达式可以完成这项工作
let myString = "1234";
myString.replace(/\b(\d{2})(\d{2})/g, ':')
但现在我想弄清楚如何在
这样的情况下使用它
94 - 这应该替换为 23 然后它在冒号后的时间做同样的事情
01:74 - 这应该替换为 01:59
我找到了一个正则表达式 ^([0-1]?[0-9]|2[0-3]):[0-5][0-9]
,但我不知道如何将它与 .replace
结合起来
有一个 replace
的重载,它接受一个函数,您可以使用该函数来执行您需要的任何逻辑,例如:
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"));
您需要匹配第一对和第二对数字,然后将它们绑定到最大值。获得有界值后,您可以填充数字并用冒号连接它们。
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:12
现在,这是一个替换示例:
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:12
我认为没有任何理由在您的案例中使用正则表达式。
只需一个简单的功能即可完成工作。
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}`
}
我正在尝试用时间格式替换 4 个数字。例如,如果用户输入 1234 将替换为 12:34
我发现这个正则表达式可以完成这项工作
let myString = "1234";
myString.replace(/\b(\d{2})(\d{2})/g, ':')
但现在我想弄清楚如何在
这样的情况下使用它94 - 这应该替换为 23 然后它在冒号后的时间做同样的事情
01:74 - 这应该替换为 01:59
我找到了一个正则表达式 ^([0-1]?[0-9]|2[0-3]):[0-5][0-9]
,但我不知道如何将它与 .replace
有一个 replace
的重载,它接受一个函数,您可以使用该函数来执行您需要的任何逻辑,例如:
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"));
您需要匹配第一对和第二对数字,然后将它们绑定到最大值。获得有界值后,您可以填充数字并用冒号连接它们。
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:12
现在,这是一个替换示例:
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:12
我认为没有任何理由在您的案例中使用正则表达式。
只需一个简单的功能即可完成工作。
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}`
}