我在代码中有一个正则表达式(由其他人编写),我试图理解该表达式的含义。
var decimal = /^\d[0,1]+(\.\d[1,4])?$/;
任何人都可以向我解释它的作用......
答案 0 :(得分:4)
按顺序:
^
- 匹配输入的开头
\d
- 一个数字(0-9)
[0,1]+
- 一次或多次出现的字符0
,,
或1
- 但请参阅下面的注释,这可能不是作者意图做
(
- 捕获组的开头
\.
- 文字.
(没有反斜杠,这意味着特别的东西)
\d
- 数字
[1,4]
- 正好是其中一个字符1
,,
或4
- 但请参阅下面的注释,这可能不是作者的意思做
)
- 捕获组的结尾
?
- 表示整个捕获gruop 可选(零或一次)
$
- 匹配输入的结尾
重新[0,1]+
和[1,4]
,表达式可能应该包含{0,1}
和{1,4}
,这意味着:
{0,1}
- 匹配在零次或一次之前发生的事情(请注意,您必须删除+
之后的[0,1]
{1,4}
- 匹配1,2,3或4次之前的内容
Here's an explanation on regex101.com
如果我们推测它们可能意味着this
/^\d{0,1}(\.\d{1,4})?$/
...然后在散文中它意味着:匹配任何可能有或没有一个前导数字的数字,然后可能有也可能没有小数点后跟一到四位数字。但它仍然存在问题,尤其是字符串""
与之匹配,并且(取决于您正在做什么)您可能希望支持等于或大于2
的值,该表达式不会“T
基本上:如果要验证小数,请将其丢弃,然后搜索能做得更好的事情,例如this如果你真的想要最多四位数的精度,你想要捕获它小数部分(与原作一样):
/^(?:0|[1-9]\d*)(\.\d{1,4})?$/
如果您想允许任何级别的精度:
/^(?:0|[1-9]\d*)(\.\d+)?$/
如果您不需要捕获组:
/^(?:0|[1-9]\d*)(?:\.\d{1,4})?$/ // Only allow 1-4 digits of precision
/^(?:0|[1-9]\d*)(?:\.\d+)?$/ // Allow any number of digits of precision
That last可能就是我要去的地方。请注意,不允许您通常不会写入的前导零(例如,它不允许02.345
)。如果您想允许它们,那么只需/^\d*(?:\.\d+)?$/
。
答案 1 :(得分:2)
关键部分:
^
:输入的开头
\d
:数字
[0,1]+
:0
或1
或,
(\.\d[1,4])?
:可选的捕获组,其中包含:.
字面值,数字和1
或4
或,
$
:输入结束
可以找到完整的故事here。
所以一些允许的输入是: