有人能解释一下 /^(\-|\+)?([0-9]+|Infinity)$/ 是什么吗?

5
/^(\-|\+)?([0-9]+|Infinity)$/

当我在查找过滤器时,我经常看到这种情况。虽然有许多变化,但通常都以(/为开头。最近,我发现这是一个建议,可以帮助解析字符串并确保其中只包含数字。在Mozilla的js页面上,我找到了一些其他运算符,但它并没有包括上述所有内容。


另请参见:https://dev59.com/jHVD5IYBdhLWcg3wWaVh - jmunsch
http://regexper.com/#%2F%5E(%5C-%7C%5C%2B)%3F(%5B0-9%5D%2B%7CInfinity)%24%2F - epascarello
最近我发现了一个名为Regex101.com的Web 2.0网站,可以用来查看、调试和测试正则表达式。它还有一个单步调试器。 - Paebbels
可能是参考-这个正则表达式是什么意思?的重复。 - Mariano
2个回答

6
这是一个正则表达式。你粘贴的表达式可以匹配正/负整数,或者匹配单词“infinity”。简而言之,正则表达式是:
正则表达式(regex或regexp)是一种用于描述搜索模式的特殊文本字符串。您可以将正则表达式视为强化版通配符。

http://www.regular-expressions.info/

你经常看到正则表达式写成/expression_here/,因为在许多编程语言中,这些斜杠是开发人员构建正则表达式对象的一种简写方式。
你可以创建一个简单的表达式来匹配数字,例如:
/^[0-9]*$/.test('44') // returns true

并且

/^[0-9]*$/.test('asdasd') // returns false

这样的表达式和你粘贴的那个一样,都会被解析并转化为小型机器(称为有限状态机)。整个机器的目的就是确定一个字符串是否与它所代表的表达式匹配,或者不匹配。然后,您可以将一个字符串输入到这样的机器中,它会把答案返回给您。
在我们上面的例子中,我们使用test方法将字符串44asdasd输入到正则表达式/^[0-9]*$/中,它会返回true,因为44与表达式匹配,而对于asdasd则返回false,因为它不匹配。
我们也可以分解你在帖子中包含的正则表达式: ^表示正则表达式必须从字符串的最开始处匹配 (\-|\+)表示从字符串的开头开始匹配,要么匹配-,要么匹配+,问号表示这部分是可选的

[0-9]+|Infinity 的意思是“匹配从0到9的一个或多个数字”,或者 (|) 匹配文本 Infinity

$ 的意思是“然后要求字符串在此结束”


3

这是一个正则表达式,可以匹配正/负自然数或Infinity

/^(\-|\+)?([0-9]+|Infinity)$/

^(\-|\+) - 匹配字符串开头的-+字面字符之一。

? - 前面的表达式,即-/+字符是可选的。换句话说,该表达式可以匹配0次或1次。

([0-9]+|Infinity)$ - 字符串结尾应为1个或多个数字或字符串Infinity

// Matches:
'-100'.match(/^(\-|\+)?([0-9]+|Infinity)$/);
'+100'.match(/^(\-|\+)?([0-9]+|Infinity)$/);
'Infinity'.match(/^(\-|\+)?([0-9]+|Infinity)$/);

// Does NOT match:
'5%'.match(/^(\-|\+)?([0-9]+|Infinity)$/);
'20/1'.match(/^(\-|\+)?([0-9]+|Infinity)$/);
'NaN'.match(/^(\-|\+)?([0-9]+|Infinity)$/);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接