淺議正則表達式中的 「豎線(|)」

1.  前言

這兩天有點空,可是也不能這麼閒着啊。因此就翻了翻 <<精通正則表達式>> 一書。 發現了不少本身不瞭解的東西(汗顏阿,本身知道的東西太少了!)。其中"|"就是其中一個。不懂就補吧,因此就有了下面的一點記錄。正則表達式

2. 用途

|」 他的意思就是 「或 」 。 用他咱們能夠把不一樣的 子表達式 合成一個總表達式,而這個總的表達式能夠匹配 任意一個 的子表達式。我以爲下面有幾個名稱須要解釋一下。ide

  • 子表達式工具

  • 表達式中被 「| 」 分格開的部分。如圖 中的 「Back 」 、 「Go 」 和 「Do 」 就分別是一個子表達式。(這裏對子表達方式的定義只是適用於多選結構)ui

  • 任意一個spa

  • 表示該表達式能夠匹配上例中的 「Back 」 、 「Go 」 或 「Do 」 中的任何可是 只能是一個 。 也就是說他不能匹配 「BackDo 」 或 「GoDo 」 這樣的字符串。調試

下面咱們就舉幾個例子來講明他的用法。ip

  • 「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) 」 了。在這個範圍中就符合咱們上面對於子表達式的定義了。咱們能夠經過下面這兩個圖來證實這一點。get

正則表達式在線調試工具io

http://regexr.com/

詳細說明:

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

相關文章
相關標籤/搜索