我需要以“(number_of_years)y(number_of_months)m(number_of days)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

最佳答案

这是替代版本。项目之间需要空间,不需要订购

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


或需要订购

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


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

10-06 00:17