正規表示式回顧

Pandaaa發表於2018-07-06

說明

  • 最近的業務正則較多,特此回顧一下基本用法
  • 適用於 正規表示式的有經驗的朋友。

匹配任意字元


let reg = /a../g;
reg.test('aqw'); //true

複製程式碼

匹配字母和數字

let reg = /\w/g;
reg.test('1231qwesadFSD');
//true
//匹配所有的數字和大小寫字母

let regNumber = /\d/g;
regNumber.test('31241320');
//true
// 匹配所有的數字

// \D 和 \W 就是補集
複製程式碼

集合和匹配多個


//目標匹配 ‘yo,Yo,yO’ 
let bad = /yo/g;
let reg = /[Yy][Oo]+/g;
reg.test('Yo'); // true
reg.test('yO'); // true
//集合的重要性
複製程式碼

單詞邊界

  • \b

let reg = /yo{1,4}\b/;
reg.test('yo'); // true
reg.test('yoo'); // true
reg.test('yooo'); // true
reg.test('yooooooooooo'); // false 因為單詞邊界
複製程式碼

分組

  • $1 $2 的使用 replace 的使用

let reg = /(ad)..(cd)/g;
'adqwcd'.replace(reg,'$1 123 -- $2')
// ad 123 -- cd

複製程式碼

匹配不捕獲

  • 這樣的話第一組就會 undefined,第二組變成第一組。只匹配不捕獲分組

let reg = /(?:ad)..(cd)/g;
'adqwcd'.replace(reg,'$1 123 -- $2')
// cd 123 -- undefined

複製程式碼

正向預查(匹配右邊)和反向預查(匹配左邊)

  • 未做詳細的解釋,大家可以查閱詳細的資料

// 100元
// 1000元
// 100刀
// 1000鎊
let reg = /\d+(?=元)/


let reg = /(?<=¥|\d)\d+/
// ¥100
// $ 100
// 

複製程式碼

速查表

符號 描述 例子 能匹配 不能匹配
^ 行首或字串開始 ^yo yo ayo
$ 行末或字串結束 yo$ yo yop
\b 單詞邊界 \byo\b mu yo mu muyomu
\B 非單詞邊界 \Byo\B muyomu mu yo mu
符號 描述 例子 能匹配 不能匹配
(?=xxx) 正向肯定預查,從任何匹配xxx的字串開始處匹配查詢字串 yo(?=o) yoo yo
(?!xxx) 正向否定預查,從任何不匹配pattern的字串開始處匹配查詢字串 yo(?!o) yo yoo
(?<=xxx) 反向肯定預查,與正向肯定預查類擬,只是方向相反 (?<=y)o yo yoo
(?<!xxx) 反向否定預查,與正向否定預查類擬,只是方向相反 (?<!goo)d mood good
符號 描述 例子 能匹配 不能匹配
[ ] 字符集合 [ace] a, c, e d
[ - ] 字元範圍 [a-c] a, b, c d
[^ ] 不包含的字符集合 [^abc] d, e a, b, c
. 匹配除斷行外的任何字元 yo. yoo, yop, yoh yo
\s 空白字元,等於[\n\r\f\t ] la\sla la la lala
\S 非空白字元,等於[^\n\r\f\t] la\sla lala la la
\d 數字 \d{2} 23 1a
\D 非數字 \D{3} yoo, abc yo1
\w 單詞,等於[a-z-A-Z0-9_] \w{4} v123 v12.3
\W 非單詞,等於[^a-z-A-Z0-9_] .$%? .$%? .ab?
特殊字元 描述
\n 斷行
\r 回車符
\t 製表符
\v 垂直製表符
\f 換頁
[\b] 退格
符號 描述 例子 能匹配 不能匹配
| 或,其一 a|b a, b c
(xxx) 匹配xxx並獲取這一匹配 yo(o|p) yoo 或 yop yoh
(?:xxx) 匹配xxx但不獲取這一匹配 y(?:o) yo ya
+ 重複1次或多次 yo+ yo, yooo y
* 重複0次或多次 yo* y, yoo yop
? 出現0次或1次 yo? y, yo ye
?? ?的懶惰模式,儘可能少匹配 yoo?? yo yoo
+? +的懶惰模式 yo+? yo yoo
*? *的懶惰模式 yo*? y yo
{n} 重複n次 yo{2} yoo yooo
{n,m} 重複n到m次 yo{1, 3} yo,yooo yoooo
{n,} 重複至少n次 yo{2,} yoo, yooo yo

相關文章