1. 前言
这两天有点空,但是也不能这么闲着啊。所以就翻了翻<<精通正则表达式>>一书。 发现了很多自己不了解的东西(汗颜阿,自己知道的东西太少了!)。其中"|"就是其中一个。不懂就补吧,所以就有了下面的一点记录。
2.用途
“ |”他的意思就是 “或” 。 用他我们可以把不同的子表达式合成一个总表达式,而这个总的表达式可以匹配任意一个的子表达式。我觉得下面有几个名称需要解释一下。
-
子表达式
-
表达式中被 “|” 分格开的部分。如图中的 “Back” 、 “Go” 和 “Do” 就分别是一个子表达式。(这里对子表达方式的定义只是适用于多选结构)
-
任意一个
-
表示该表达式可以匹配上例中的 “Back” 、 “Go” 或 “Do” 中的任何但是只能是一个。 也就是说他不能匹配 “BackDo” 或 “GoDo” 这样的字符串。
下面我们就举几个例子来说明他的用法。
-
“Jettery|Jettrey” 和 “Jett(er|re)y”
-
看看 “Jettery|Jettrey” 和 “Jett(er|re)y” 之间有什么区别。他们匹配的结果是否相同? 如果从匹配结果来看的话他们是等价的。都能够匹配“Jettery”或“Jettrey”。但是过程确实不一样的。在 “Jettery|Jettrey” 中我们可以很容易的区分出子表达式分别是 “Jettery” 和 “Jettrey” 。但是在 “Jett(er|re)y” 中就不是这个样子了。他的子表达式分别是 “er” 和 “re”,为什么他们的子表达式是 “er” 和 “re” 而不是 “Jett(er” 和 “re)y” 呢?上面不是说子表达式是被 “|” 分隔开的部分吗。在这个表达式中 “Jett(er” 和 “er)y” 的确是被 “|” 分隔开的两个部分啊?。对这个没有错,但是因为 “()” 的存在改变了 “|” 的作用范围。那么在这个表达式中 “|” 的作用范围就只是 “(erre)” 了。在这个范围中就符合我们上面对于子表达式的定义了。我们可以通过下面这两个图来证明这一点。
正则表达式在线调试工具
详细说明:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions
原文链接:https://www.f2er.com/regex/359568.html