有人可以通过使用正则表达式来帮助解决这个问题。 “useInput”函数必须将分钟作为第一个参数,将秒作为第二个参数,如果输入可以是:“1 2”(两位数 - 分秒),“1”(只是一个数字 - 分钟) , "1分2", "2秒1"。
不是那么必要,但如果不是太难:seconds = sec = second = s;分钟 = 分钟 = 分钟 = 米; Іnstead of "1 minutes"你可以将 "1 min"写入 "input"
const input = " 2 seconds 1 minutes "
const regexTimer = new RegExp(/([0-9]+)\s*minutes?|([0-9]+)\s*seconds?/, 'g')
useInput(input.replace(regexTimer, '$1$2')).split(' '));//1 parameter is minute, 2 parametr is second
function useInput(minutes, seconds){...};
最佳答案
您可以使用捕获组并将这些组值传递给函数。
检查哪些组值不为空,并基于此以正确的顺序将参数传递给函数 useInput。
对于秒和分钟的部分名称,您可以使用嵌套的可选组。
^\s*(?:(\d+)(?:\s*(\d+))?|(\d+)(?:\s+s(?:ec(?:onds?)?)?)?(?:\s+(\d+)(?:\s+m(?:in(?:utes?)?)?)?)?|(\d+)(?:\s+m(?:in(?:utes?)?)?)?(?:\s+(\d+)(?:\s+s(?:ec(?:onds?)?)?)?)?)\s*$
const useInput = (minutes, seconds) =>
console.log(`minutes: ${minutes ? minutes : "n/a"} - seconds: ${seconds ? seconds : "n/a"}`);
const regex = /^\s*(?:(\d+)(?:\s*(\d+))?|(\d+)(?:\s+s(?:ec(?:onds?)?)?)?(?:\s+(\d+)(?:\s+m(?:in(?:utes?)?)?)?)?|(\d+)(?:\s+m(?:in(?:utes?)?)?)?(?:\s+(\d+)(?:\s+s(?:ec(?:onds?)?)?)?)?)\s*$/;
[
"1",
"1 2",
"1 minutes 2",
"4 seconds 3",
"5 seconds",
"6 minutes",
"7 min",
"8 sec",
"9 s 10 m",
"11 m 12 second",
"20 9 sec",
"30 s 44",
"test"
].forEach(s => {
let m = s.match(regex);
if (m) {
if (m) {
if (undefined !== m[1]) useInput(m[1], m[2])
if (undefined !== m[3]) useInput(m[4], m[3])
if (undefined !== m[5]) useInput(m[5], m[6])
}
}
})
关于javascript - 如何使用正则表达式验证此类输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66154361/