最近在读Jquery的源码,遇到一个匹配数字的正则表达式,对其中的|的用法存在疑问,我想问的是在下面的代码中,有两处用到了|,表示什么意思?
// Used for matching numbers
core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
jQuery的源码应该就是JavaScript了;
|在正则表达式中一般是元字符,有特殊的意思,它的意思是或,比如(2|3)这段正则表达式用来匹配2或者3,2和3称为(2|3)的子表达式,也称为“多选分支”,其实在这里(2|3)也可以写成2|3为了和题目对照起来故加了括号,括号也有它的用意,下面会有解释。(不过写完之后还是发现没有解释了,累了)
首先对这段正则表达式`[+-]?(?:d*.|)d+(?:eE?d+|)进行拆解,分成
[+-]?,(?:d*.|),d+和(?:eE?d+|)
1.[+-]?`表示匹配正或者负,下限零次,上限一次;2.(?:\d*\.|):
表示匹配数字(下限是零次,没有上限)且点号,或者空(nothing),就是|之后为空。(?:...)
表示不捕获分组,不捕获分组和反向引用有关,这里暂不解释。3.\d+
这个比较简单4.(?:[eE][+-]?\d+|):
不捕获,可以分成两部分来看,第一部分是eE?d+,|之后是第二部分,匹配空(nothing)。
整个表达式看起来,首先判断有没有正负号在前面(这里不能说开头,比如一行开头需要用^来匹配);
然后不管前面是正号或者负号,或者都没有,现在要匹配的是数字(可有可无)加一点的情况,或者是空;接着匹配数字,至少一次,所以不管前面是什么情况到了这里能匹配到的例如.09或者就是匹配的数字的一个或者多个;
最后的不捕获分组(?:[eE][+-]?\d+|)
和科学计数有关。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。