Javascript 如果没有任何组返回结果,如何构建不返回空字符串的正则表达式
我正在尝试构建一个正则表达式来匹配时间表小时数条目,其中用户以Javascript 如果没有任何组返回结果,如何构建不返回空字符串的正则表达式,javascript,regex,Javascript,Regex,我正在尝试构建一个正则表达式来匹配时间表小时数条目,其中用户以20h50m格式输入他的小时数 在此格式中,用户可以只输入小时20h,或只输入分钟50m,或同时输入小时和分钟20h 50m 样本匹配 45m 1h 2h 45m 数字可以是20或50以外的任何数字 我提出了这个正则表达式(([0-9]+h)\s([0-9]+m))|([0-9]+h)([0-9]+m)){1},它很长,我正在尝试减少它 所以我尝试了不同的解决方案:(\d+h)?([\s]*(\d+m))?。但是这个解决方案的问题是
20h50m
格式输入他的小时数
在此格式中,用户可以只输入小时20h
,或只输入分钟50m
,或同时输入小时和分钟20h 50m
样本匹配
45m
1h
2h 45m
数字可以是20
或50
以外的任何数字
我提出了这个正则表达式(([0-9]+h)\s([0-9]+m))|([0-9]+h)([0-9]+m)){1},它很长,我正在尝试减少它
所以我尝试了不同的解决方案:(\d+h)?([\s]*(\d+m))?
。但是这个解决方案的问题是它匹配空字符串,并且不匹配像2h 45m
这样的模式
如何修改最后一个正则表达式,使其与以下格式匹配
45m
1h
2h 45m
以下是我的看法:
/(?<=\b)\d+h \d+m|\d+[hm](?=\b)/g
/(?
我认为它会起作用。要匹配所有变化,您可以使用
\b(?:\d+h(?: \d+m)?|\d+m)\b
解释
\b
单词边界
(?:
非捕获组
\d+h
匹配1+位和h
(?:\d+m)?
可以选择匹配一个小零件
|
或
\d+m
匹配1+位和m
)
关闭组
\b
单词边界
如果您希望按该顺序匹配小时和分钟,可以使用锚定^
和$
^(?:\d+h(?: \d+m)?|\d+m)$
您当前的正则表达式也匹配999m
-这是预期的吗4m 4h
是有效的格式吗?\s
不是您想要的([\f\n\r\t\v - ]代码>)。要精确匹配空格,请使用``。您的代码也匹配23ms
^(?:\d+h(?: \d+m)?|\d+m)$