正則複習

前言

一直髮現我是個野路子,在學完 TS 和 Express 後,纔回過頭來想鞏固一下 正則 的知識,不過話說回來,有了 TS 一些可選參數,以及 後端框架的路由匹配機制後,其實對於正則的理解是有一定作用的。類比這些概念時,發現有太多太多的相似之處,下面將會例舉。
所以說,貼近標準,跟隨標準(世界大廠)是最最最重要的,像小程序這樣反 URL 透明可見的精神的產物,站在非商業的角度來看,確實沒有任何價值。扯遠了。。。
下面開始用自己的話來進行盤點:

量詞

我們在匹配字符串中某個 子段 時,需要有足夠的數量去進行限制,這樣才能保證匹配到的結果足夠準確。
常見的量詞有:

  1. ? => 意思爲:可選 0 或者 1 ,跟 ts 函數的可選參數一樣
  2. + => 意思爲: 1個或者多個
  3. * => 意思爲:通配符,0個或者任意個

Range 區間

例如,我想匹配 1~5 個 ‘a’ , 用 【量詞】中的哪個都不合適,這時候就應該有一個區間的概念來進行約束:

const reg = /^a{1,5}/i;
'a'.match(reg);  // 匹配 1 個 a , ["a", index: 0, input: "a", groups: undefined]
...
reg.test('aaaaa'); // 匹配 5 個 ,["aaaaa", index: 0, input: "aaaaa", groups: undefined]
reg.test('aaaaaa'); // 只能匹配到 5 個 ["aaaaa", index: 0, input: "aaaaaaaaa", groups: undefined]

可見,{ } 中的邊界,是數學定義上的 左右閉合區間。

另外,還有一種區間,先看下實例:
[a-z] 代表匹配 a-z 的小寫字母,[A-Z] 匹配 A 的大寫字母。這些用 “-” 來表示的字符集,都是通過 ASCII 碼 來進行排序的。
舉個 🌰:

const reg = /([a-z][A-Z]){1,2}/;
reg.test('aZ'); // true
reg.test('aBcccadsadsad') // true 匹配到了一個

內置特殊匹配器

爲了不讓廣大開發者寫出太過於雷人的代碼,也是內置了許多匹配器:

  1. \b 匹配單詞邊界 \B 匹配非單詞邊界
  2. \w 匹配字母 \W 匹配非字母
  3. \d 匹配數字 \D 匹配非數字
  4. 其他製表符和換行符等

待續。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章