首頁 > 軟體

正規表示式預查的詳細解釋與應用範例

2022-09-02 18:02:14

解釋

預查又稱環視(Lookaround)、屬於零寬斷言(Zero-Length Assertions)的一種,有 4 個語法:

語法中文名英文名
(?=regex)肯定性前瞻Positive lookahead
(?!regex)否定性前瞻Negative lookahead
(?<=regex)肯定性後顧Positive lookbehind
(?<!regex)否定性後顧Negative lookbehind

比較通俗的解釋:

  • 肯定性:匹配 regex
  • 否定性:不匹配 regex
  • 前瞻:向前(右、正向)看(預查)
  • 後顧:向後(左、反向)看(預查)
  • 肯定性前瞻:先看看前方(右邊)是否匹配 regex,但不向前走
  • 否定性前瞻:先看看前方(右邊)是否不匹配 regex,但不向前走
  • 肯定性後顧:回頭看後方(左邊)是否匹配 regex
  • 否定性後顧:回頭看後方(左邊)是否不匹配 regex

為什麼右邊是正向、前向,左邊是反向、後向?

因為正則是從左往右匹配的,就像一個人在走,那麼向前看(前瞻)就是右邊、正向,向後看(後顧)就是左邊、反向,特別注意不要和字首字尾搞混

應用

1、判斷是否同時包含但不限於大寫字母、小寫字母和數位,且不能包含 114514,長度為 8~32 個字元

/^(?=.*[A-Z])(?=.*[a-z])(?=.*d)(?!.*114514).{8,32}$/.test('10086@qq.COM')
// true

2、判斷不以 8082848688 開頭

/^(?!8[02468])d+$/.test('81789110')
// true

3、匹配由空白分割的字串中的純數位串

'123 abc   1strn4   1970's 56 @10086 789'.match(/(?<!S)d+(?!S)/g)
// ['123', '4', '56', '789']
'123 abc   1strn4   1970's 56 @10086 789'.match(/(?<=^|s)d+(?=s|$)/g)
// ['123', '4', '56', '789']

4、僅刪除夾在數位中的逗號

'And then, I have 1,003,334, you have 996,6,6,6'.replace(/(?<=d),(?=d)/g, '')
// 'And then, I have 1003334, you have 996666'

5、在數位中新增分組逗號

'And then, I have 1003334, you have 996666'.replace(/(?<=d)(?=(?:d{3})+(?!d))/g, ',')
// 'And then, I have 1,003,334, you have 996,666'

6、判斷是否僅包含字母,但不包含小寫母音字母

/^(?:(?![aeiou])[A-Za-z])+$/g.test('src')
// true
/^(?=[A-Za-z]+$)[^aeiou]+$/g.test('src')
// true

7、判斷是否是字母或數位或字母+數位,不能為空

/^(?=.)[a-z]*d*$/i.test('Add1')
// true

8、匹配長度為 11 的號碼,注意不能是其他號碼的子串

`name:123456789
id:11012345678910
tel:12345678910
name:abc11111111111
id:888888888888
tel:11966`.match(/(?<!d)d{11}(?!d)/g)
// ['12345678910', '11111111111']

9、如果缺少協定字首,則新增 http://,忽略空行

String.raw`segmentfault.com
//bing.com
baidu.com

127.0.0.1
ftp://127.0.0.1

https://google.com

`.replace(/^(?![a-z]+:)[\/]*(?=.)/gim, 'http://')
/*
http://segmentfault.com
http://bing.com
http://baidu.com

http://127.0.0.1
ftp://127.0.0.1

https://google.com

*/

難點-為什麼.?[^#/n]?.*?不行

  • .?[^#/n]?.*?<VirtualHost
  • .?[^#/n]?相當於無,最後的.*?又匹配上了#號
  • (?<!.?#.?)來說就是一個整體,所有滿足要求

總結 

到此這篇關於正規表示式預查的詳細解釋與應用的文章就介紹到這了,更多相關正規表示式預查內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com