regex无法解析0-23之间的数字

regex failing to parse number from 0-23

本文关键字:之间 数字 0-23 regex      更新时间:2023-09-26

为什么这个js正则表达式无法解析0-23之间的数字?

pattern = /([0-1]?[0-9]|2[0-3])/
"12".match(pattern) // => matches 12
"23".match(pattern) // => matches 2 (expected 23)

正则表达式返回第一个匹配项。[0-1]?[0-9]2匹配。

为了得到你想要的,你需要调整图案的顺序:

var pattern = /2[0-3]|[0-1]?[0-9]/;

var pattern = /2[0-3]|[0-1]?[0-9]/;
document.write("12".match(pattern));
document.write('<br/>');
document.write("23".match(pattern));

更新

以上将匹配返回23234。如果你不想匹配它,你可以像Gergo Erdosi建议的那样使用单词边界'b^$锚:

var pattern = /'b2[0-3]'b|'b[0-1]?[0-9]'b/;
var pattern = /'b(2[0-3]|[0-1]?[0-9])'b/;

为什么这个js正则表达式无法解析0-23之间的数字?

因为正则表达式中的第一个模式总是试图匹配输入字符串(即|之前的模式)。如果它找到了匹配项,那么它就不会选择下一个模式(即|之后的模式)。您的第一个模式与2匹配,因此它无法进入下一个模式。

如果你颠倒模式的顺序,它就会起作用。

在验证输入字符串时,最好使用起始和结束锚点。

> var pattern = /^([0-1]?[0-9]|2[0-3])$/g;
undefined
> "12".match(pattern)
[ '12' ]
> "23".match(pattern)
[ '23' ]

确保正则表达式与完整字符串匹配:

pattern = /^([0-1]?[0-9]|2[0-3])$/

您非常接近。试试这样的东西:

pattern = /^([0-1]?[0-9]|2[0-3])$/

您的表达式当前正在匹配表达式的第一部分,然后才能计算后半部分。有几种方法可以处理这一问题,但匹配输入的完整长度可能是最简单的。