如何使用正则表达式为 JS 验证像 '$Now + 2h' 这样的字符串?

How to validate a string like '$Now + 2h' using regex, for JS?

我有一个用户输入需要验证:

字符串由第 1 部分 + 第 2 部分组成。 第 1 部分 可以是“$Now”或“$Today”或“$CurrentMonth”。 第 1 部分是强制性的。

第 2 部分 可以是 '+' 或 '-' 后跟 numberunit. Number可以是任意数字,Unit应该是'm'、'h'、'd'之一。 第 2 部分是可选的

一些有效的例子:

'$Now', 
'$Today',
'$CurrentMonth',
'$Now + 2h',
'$Now - 4m',
'$Now + 6d',
'$Today - 7d'

尝试了几种模式但无法通过,因为我对正则表达式的了解很少。

你可以使用这个正则表达式:

^$(Now|Today|CurrentMonth)\s*(?:([+-])\s*(\d+)([dhm]))?\s*$

它查找 $Now$Today$CurrentMonth 之一,后跟可选的 +/-、数字和单位(dmh)。它在第 1 组中捕获 Part 1,然后在第 2 组中捕获 +/-,在第 3 组中捕获数字,在第 4 组中捕获单位以简化 post 处理。

Demo on regex101