javascript - 需要了解一些正则表达式

标签 javascript regex

<分区>

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

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

谁能给我解释一下它的作用...

最佳答案

按顺序:

  • ^ - 匹配输入的开头

  • \d - 一个数字 (0-9)

  • [0,1]+ - 出现一次或多次字符 0 , , , 或 1 ——但请看下面的注释,这可能不是作者的本意

  • ( - 捕获组的开始

  • \. - 文字 . (没有反斜杠,这将意味着一些特殊的东西)

  • \d - 一个数字

  • [1,4] - 正好是其中一个字符 1 , , , 或 4 ——但请看下面的注释,这可能不是作者的本意

  • ) - 捕获组结束

  • ? - 表示整个捕获组是可选的(零次或一次)

  • $ - 匹配输入的结尾

回复[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 的值,该表达式没有。

基本上:如果它是为了验证小数,就把它扔掉,然后搜索能做得更好的东西,比如 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+)?$/ .

关于javascript - 需要了解一些正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27506595/

相关文章:

javascript - 如何解决 z-index 和溢出问题 :scroll

javascript - 跨 Divs 移动 SVG 元素

javascript - SetTimeout 未针对 mousedown/touchstart 函数执行

java - 使用单个正则表达式验证每一行

javascript - 如何用正则表达式匹配JS中后面的字符串,但不包括单词字符?

regex - 使用 awk 返回相应的列

javascript - Ember 数据:如何正确发布

java - 将 java 对象从 javascript 传递到 java

java - 使用 Matcher.find() 时出现 IndexOutOfBoundsException

java - 删除句子和段落之间的各种额外空格