Javascript 正则表达式*y*m*d

Javascript 正则表达式*y*m*d,javascript,regex,Javascript,Regex,我需要以以下格式为字符串编写正则表达式:“(年数”)y(月数)m(日数)d”。字符串的每个部分都是可选的,应该用一个空格分隔。我的变体: /([0-9]+y\s)?([0-9]+m\s)?([0-9]+d)?/ 不好,因为在只输入字符串的第一部分或第二部分时需要添加空格。 好字符串的示例: "125y"; "36m"; "8d"; "125y 8d"; "125y 36m"; "36m 8d"; "125y 36m 8d". 不允许在字符串末尾输入空格:*y*m*y*m可以使用: ^(?!.

我需要以以下格式为字符串编写正则表达式:“(年数”)y(月数)m(日数)d”。字符串的每个部分都是可选的,应该用一个空格分隔。我的变体:

/([0-9]+y\s)?([0-9]+m\s)?([0-9]+d)?/
不好,因为在只输入字符串的第一部分或第二部分时需要添加空格。 好字符串的示例:

"125y"; "36m"; "8d"; "125y 8d"; "125y 36m"; "36m 8d"; "125y 36m 8d".
不允许在字符串末尾输入空格:
*y*m*y*m

可以使用:

^(?!.*\s$)(\d+y\s)?(\d+m\s)?(\d+d)?$

我相信有一百万种方法可以改善这一点,但这强制要求不超过12个月或31天


这里有一个替代版本。项目之间需要空间,不需要订单

^(?:(?:\b\ \b|^)?(?:(\d+y)|(\d+m)|(\d+d)))+
或者需要订购

^(\d+y)?(?:(\b\ \b|^)(\d+m))?(?:(?:\b\ \b|^)(\d+d))?$

它自己的捕获组中的每个项目

您能提供一些您想要匹配的字符串和您不想要匹配的字符串的示例吗?即,“25y 10m 29d”=良好?“25y 10m 35d”=坏?是否每个部分都需要标记为“y/m/d”?@RobertTaussig,我已经编辑了我的帖子。它允许在字符串末尾输入空格:
*y*m*y*m
Thomas,我发现
78y7m3d
也有效,但它是错误的。@Natasha:删除
\s
@Toto之后,我得到唯一有效的案例是
“125y 36m 8d”
@Natasha什么?向我们展示您的实施情况为什么要限制天数和月数?OP并没有要求这样做。因为为“1y 13m”等进行验证似乎很愚蠢。对我来说,这类似于接受“2.104美元”而不是“3.04美元”。编辑:我刚刚注意到OP的有效日期示例。我可以发誓“36m”一开始并不存在,但我可能错了。我以为我只是在做一个假设,但看起来OP在允许的范围内是明确的。最后一个变量匹配我所有的测试。谢谢!但是这个正则表达式在javascript中不起作用。我无法将其转换为javascript。你能帮我解决这个问题吗?@MyName抱歉,用Javascript修复了它。(忘记Javascript不支持条件。)如果组匹配,则基本上替换为if,前面是边界包围的空格或换行符
^(\d+y)?(?:(\b\ \b|^)(\d+m))?(?:(?:\b\ \b|^)(\d+d))?$