需要了解一些正则表达式

时间:2014-12-16 14:11:05

标签: javascript regex

我在代码中有一个正则表达式(由其他人编写),我试图理解该表达式的含义。

var decimal = /^\d[0,1]+(\.\d[1,4])?$/;

任何人都可以向我解释它的作用......

2 个答案:

答案 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]+01,

的一次或多次出现

(\.\d[1,4])?:可选的捕获组,其中包含:.字面值,数字和14,

$:输入结束

可以找到完整的故事here

所以一些允许的输入是:

  • 80.94
  • 41111111.44
  • 4 ,,, 1.44
  • 30