浅议正则表达式中的 “竖线(|)”
博客专区 > Oscarfff 的博客 > 博客详情
浅议正则表达式中的 “竖线(|)”
Oscarfff 发表于2年前
浅议正则表达式中的 “竖线(|)”
  • 发表于 2年前
  • 阅读 100
  • 收藏 2
  • 点赞 1
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: 要注意,()可以改变正则表达式的作用范围。

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) ” 了。在这个范围中就符合我们上面对于子表达式的定义了。我们可以通过下面这两个图来证明这一点。

正则表达式在线调试工具

http://regexr.com/

详细说明:

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions

 

共有 人打赏支持
粉丝 71
博文 801
码字总数 96852
×
Oscarfff
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: