10分鐘搞懂JS正則表達式

第一部分 基礎知識

一、正則申明方式

1、構造函數方式

var reg = new RegExp('\d', 'gi');
修飾符 說明
i 忽略大小寫匹配
g 全局匹配,即是匹配一個後繼續匹配,直到結束
m 多行匹配,即是遇到換行後不停止匹配,直到結束

2、字面量方式

var reg = /\d/gi;

3.正則相關符號

3.1方括號 [] 

1)^ 在 [] 內開始位置及正則雙斜線開始位置有特殊含義,其他位置表示 ^ 字符本身.$符號與^符號相反,表示結尾

'adobe 2016'.match(/^[a-zA-Z]+/);
// ["adobe"]
'adobep'.match(/p$/)
// ["p"]

 2)在 [] 內開始位置時,表示不匹配 [] 內除 ^ 以外的所有字符:

'adobe'.match(/[^abc]/g);
// ["d", "o", "e"]

 3)- (連字符)表示左邊字符的 ASCII 值到右邊字符 ASCII 編碼值之間及左右字符自身的所有字符

'adobe PS 2016'.match(/[a-g]/g);
// ["a", "d", "b", "e"]

3.2、特殊含義字符 

● . 匹配任意單個字符,除換行和結束符

'1+0.2*2=1.4'.match(/.{2}/g);
// ["1+", "0.", "2*", "2=", "1."]

● \w 匹配任意單詞字符(數字、字母、下劃線),等價於[A-Za-z0-9_]

'ad34~!@$ps'.match(/\w/g);
// ["a", "d", "3", "4", "p", "s"]

● \W 匹配任意單詞字符,與\w相反,等價於[^A-Za-z0-9_]

'ad34~!@$ps'.match(/\W/g);
// ["~", "!", "@", "$"]

● \d 匹配數字,等價於 [0-9]

'ps6'.match(/\d/g);
// ["6"]

● \D 匹配非數字,等價於 [0-9]'

'ps6'.match(/\D/g);
// ["p", "s"]

● \s 匹配空白字符,主要有(\n、\f、\r、\t、\v),注意'a\sb'中的\s依然是字符s,所以'a\sb'.match(/\s/g)返回 null

'adobe ps'.match(/\s/g);
// [" "]

● \S 匹配非空白字符,與\s相反

'adobe ps'.match(/\S/g);
// ["a", "d", "o", "b", "e", "p", "s"]

 

3.3、量詞說明

● n+ 匹配包含至少一個n的字符串

'adobe paas'.match(/a+\w+/g);
// ["adobe", "aas"]

n* 匹配包含零個或多個n的字符串

n? 匹配包含零個或一個n的字符串

n{x} 匹配包含連續x個n的字符串 

n{x,y} 匹配包含至少連續x個且最多連續y個n的字符串

n{x,} 匹配包含至少連續x個n的字符串

表達式1 表達式2
n+ n{1,}
n* n{0,}
n? n{0,1}

3.4 小括號 () 用法

1)捕獲用法
● 表示對匹配的字符串進行分組

'adobe cs9cs10, adobe cs11'.match(/([a-z]+\d+){1,2}/g)
//[ 'cs9cs10', 'cs11' ]

分組還有一個用法,替換字符串 ,$1,$2,$3 只是佔位符

var dateStr = '2018/04/18';
var reg = /(\d{4})\/(\d{2})\/(\d{2})/;
dateStr = dateStr.replace(reg, '$1-$2-$3') //"2018-04-18"

 

● 與|一起使用表示選擇性

"he is 12. she is 13. it's box".match(/(it|she|he)\s+is/g);
// ["he is", "she is"]

● 表示對匹配的字符串捕獲(正則在非全局(g)模式下)

'adobe cs9'.match(/[a-z]+(\d+)/);
// ["cs9", "9"]
//注意是cs9裏面中最後一個匹配的,比如
'adobe cs9f5'.match(/[a-z0-9]+(\d+)/)
//[ 'cs9f5', '5']

2)非捕獲用法,以(?)形式出現

● (?:n ) 表示非捕獲組(不會對匹配的字符串捕獲)

'adobe11ps15test'.match(/[a-z]+(1|3)+([a-z]+)/);
// ["adobe11ps", "1", "ps"]
//如果不想數組含有1,可以這樣
'adobe12ps15test'.match(/[a-z]+(?:\d+)([a-z]+)/);
// ["adobe12ps", "ps"]

● (?=n ) 匹配任何其後緊跟字符n的字符串,但返回中不包含n

'adobe12ps15test'.match(/[a-z]+(?=\d)/g);
// ["adobe", "ps"]

● (?!n ) 匹配任何其後沒有緊跟字符n的字符串,返回中不包含n

'adobe12ps15test'.match(/[a-z]+(?!\d)/g);
// ["adob", "p", "test"]

● (?<=n ) 匹配任何其前緊跟字符n的字符串,返回中不包含n

'adobe12ps15test'.match(/(?<=\d)[a-z]+/g);
// ["ps", "test"]

● (?<!n ) 匹配任何其前緊跟字符n的字符串,返回中不包含n

'adobe12ps15test'.match(/(?<!\d)[a-z]+/g);
// ["adobe", "s", "est"]

3.5對象方法

1) RegExp對象相關方法

2)String對象相關方法

 

4.注意

.  *  + 等特殊符號的含義在[]中括號中失效

4.常見的正則表達式

1.手機號:/^1[35678]/d{9}$/

2.郵箱:/^\w+@\w+\.\w{2,5}$/   或者  /^[0-9a-zA-Z_-]+@[0-9a-zA-Z_-]+\.[0-9a-zA-Z_-]{2,5}$/

3.用戶名:/^[a-zA-Z0-9_-]{4,15}$/    只能是字母數字下劃線橫槓,長度4-15位

4.密碼:/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$/  至少含一個字母,數字  長度6-20位

 

發佈了33 篇原創文章 · 獲贊 24 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章