我似乎一辈子都想不出如何使用格式设置元素的正则表达式。
1d 5h 6m 12s
并且还允许它有任何变化,例如
1d
1d 1h
1d 1h 1m
1d 1s
6m 12s
etc...
是否可以使用正则表达式来进行这种类型的格式化?
最佳答案
假设您需要它是有序的,
if (/^\s*(?:(?:[1-9]\d*|0)d\s+)?(?:(?:1?\d|2[0-3])h\s+)?(?:[1-5]?\dm\s+)?(?:[1-5]?\ds)?\s*$/.test(str))
{
// success
}
这里有一个快速分割:
^
和$
被称为 anchor 。它们匹配字符串的开头和结尾,因此您匹配的是整个字符串,而不仅仅是一部分,例如hello, world! 1d 5h 6m 12s
否则将通过。\s*
和\s+
匹配零个或多个以及一个或多个空白字符。(?:[1-9]\d*|0)
匹配任意数量的数字,但不匹配以零开头的数字,除非它恰好为零。(?:1?\d|2[0-3])
匹配 0 到 23 之间的数字,包括 0 和 23。[1-5]?\d
匹配 0 到 59 之间的数字,包括 0 到 59。(?: ... )
被称为非捕获组。它们就像括号(用于分组),除了普通的圆括号capture,我们在这里不需要它。?
表示前面的实体是可选的。
关于javascript - 正则表达式 javascript 数字和字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14774604/