regex无法解析0-23之间的数字
regex failing to parse number from 0-23
为什么这个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));
更新
以上将匹配返回23
的234
。如果你不想匹配它,你可以像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])$/
您的表达式当前正在匹配表达式的第一部分,然后才能计算后半部分。有几种方法可以处理这一问题,但匹配输入的完整长度可能是最简单的。
相关文章:
- 如何使用JavaScript查找1和N之间的所有数字的总和
- 输入字段,只接受0到12之间的数字
- 删除图形和数字之间的连字符(-)符号
- 计算HTML表TD中两个数字之间的百分比
- 通过变量在两个数字之间切换
- 在我的网站上创建一个在1-10之间不断变化的数字时遇到了问题.Javascript
- 如何创建一个确定2个数字之间值的函数
- 用于获取两个方括号之间的数字的正则表达式
- 在 javascript 中,将数字之间出现的所有“-”替换为“:”
- 正则表达式和 javascript:匹配数字后跟空格和大写字母之间的所有内容
- 剑道 UI - 自定义数字格式在 2015.3.1111 > 2016.1.412 之间更改
- Jquery if 在 2 个数字之间
- php中的函数或介于-200和200之间但不为零的数字
- 验证数字是否在0.00到20.00之间的正则表达式
- 如何在javascript中生成任意四个数字之间的随机数
- 验证javascript中的输入是否在2个数字之间
- 从1-9之间的随机数字列表中选出3个相同的数字
- 如何使除法符号在基本计算器的数字之间只出现一次
- 正则表达式用于验证两个范围之间的数字
- 需要用 Javascript 或 jQuery 替换 [..] 之间的数字