我需要以“(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))?$
自己的捕获组中的每个项目