【发布时间】:2021-02-17 04:54:18
【问题描述】:
我正在尝试编写一些 javascript 正则表达式来验证 cron 作业的每月部分是否有效。 (不熟悉的可以查看https://crontab.guru)
cron 作业每月部分可以指定一个作业是 双月刊, 每3个月, 4个月, 或 6 个月。
可以使用以下 4 种格式指定每 4 个月发生一次的作业:
- * * * */4 *
- * * * 04,08,12 *
- * * * 4,8,12
- * * * 04,8,12
- * * * 4,08,12
第一种格式的正则表达式可能类似于:([*][/][2346]),它可以与正则表达式进行布尔或运算以覆盖其余部分。
对于其余部分,我想出了(0?[1-9]|1[012])(,(0?[1-9]|1[012]))* 的完整正则表达式:(0?[1-9]|1[012])(,(0?[1-9]|1[012]))*|([*][/][2346])
但这似乎不起作用!
使用https://regexr.com/4jp54 的正则表达式测试器,可以看到第一个和第二个布尔OR (|) 右侧的每个正则表达式都没有按预期工作,因此两个实例|1[012] 不会似乎有效。
所以01,03,5,7,09 会匹配,但01,03,5,7,09,11 和4,8,12 不会匹配,因为每个表达式中的11 和12 不会匹配。
有谁知道我做错了什么?
【问题讨论】:
-
您可以使用
^\* \* \* (?:0?[48],0?[48],12|\*\/4)(?: \*)?$regex101.com/r/oAorCl/1 匹配该格式 -
正则表达式与哪个工具一起使用?有很多不同的正则表达式方言。
-
我认为正则表达式不适合这项工作。您正在尝试通过模式匹配来验证数值,这就像用螺丝刀搅拌油漆一样。此外,您甚至可能不需要编写代码来执行此操作,因为已经编写了 crontab 验证器。
标签: javascript regex cron expression