javascript - 如何使用正则表达式验证此类输入?

标签 javascript node.js regex

有人可以通过使用正则表达式来帮助解决这个问题。 “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*$

Regex demo

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/

相关文章:

node.js - 我有很多损坏的 Homebrew 符号链接(symbolic link),我该怎么办?

php - 日期的正则表达式在 php 中不起作用

javascript - Sequelize - 是否存在双向关联?

javascript - RenderPartial 忽略周围的 Knockout foreach

javascript - 如何在reactjs中从localStorage实时获取、删除、更新数据?

javascript - 如何使用任何 Node 库尤其是 axios 将文件上传到服务器?

javascript - empythoned 中的 import 语句在 chrome 扩展中不起作用

javascript - Jade : ReferenceError: TokContext is not defined

regex - 非贪婪正则表达式匹配、JavaScript 和 ASP

java - 不知道如何使用替换