开发者社区> 问答> 正文

Jquery 正则表达式的中'|'的含义

最近在读Jquery的源码,遇到一个匹配数字的正则表达式,对其中的|的用法存在疑问,我想问的是在下面的代码中,有两处用到了|,表示什么意思?

// Used for matching numbers
core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,

展开
收起
云栖技术 2016-05-25 10:02:16 4179 0
1 条回答
写回答
取消 提交回答
  • 社区爱好者,专为云栖社区服务!

    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+|)和科学计数有关。

    2019-07-17 19:13:34
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Javascript中的函数 立即下载
JavaScript函数 立即下载
Delivering Javascript to World 立即下载