正規表示式 中括號[] 字元類

admin發表於2018-10-06

正規表示式字元類使用中括號[]定義。

程式碼演示如下:

[JavaScript] 純文字檢視 複製程式碼
[abc]

中括號中是由一個或者多個字元構成的字符集合。

對語法結構名稱感性上的理解往往有助於記憶或者概念上的理解。

字元類由"字元"+"類"構成,字元很容易理解,比如字母或者數字等都是字元。

類可以理解為某些共同的特點,比如人類、哺乳類或者機械類等。

程式碼模擬如下:

[JavaScript] 純文字檢視 複製程式碼
[張三李四王二]

中括號中的都是人,所以稱之為人類。

[JavaScript] 純文字檢視 複製程式碼
[abc123]

中括號中的都是字元,所以稱之為字元類。

通過上面的介紹是不是對字元類這個名稱或者概念有了進一步的理解。

一.字元類基本應用:

字元類可以匹配它所包含的任意一個字元。

也就是說只要字串中包含任意一個字元類的字元,那麼就可以完成匹配

特別說明:字元類的字元是以單個字元為單位進行匹配,不能是字元的組合。

程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let str="softwhy.com";
let reg=/[azc]/g;
console.log(str.match(reg));

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201810/06/161741b9f9illkt99z92tz.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

字元類中的字元"c"可以匹配字串中的字元"c"。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let str="softwhy.com";
let reg=/[fzc]/g;
console.log(str.match(reg));

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201810/06/161809rq1damwivzviwj2t.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

字元類中有兩個字元"f"與"c"可以匹配字串中的對應字元。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let str="softwhy.com";
let one=/[ft]/g;
let two=/ft/g;
console.log(str.match(one));
console.log(str.match(two));

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201810/06/161835chxy7wlwz61ew29l.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

可以看到字元類是以單個字元為單位進行匹配,字元之間不能組合。

關於match方法可以參閱正規表示式 match()一章節。

二.反字元類:

中括號以^起始可以構成一個反字元類。

程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let str="softwhy.com";
let reg=/[^ft]/g;
console.log(str.match(reg));

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201810/06/161946vhwnso5ynamynjkn.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

字元類是匹配中括號內包含的任意一個字元,反字元類匹配除去中括號內所有字元外的任意一個字元。

所以上述正規表示式可以匹配除去"f"與"t"之外的所有字元。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let str="an6t888";
let reg=/[^0123456789]/g;
console.log(str.match(reg));

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201810/06/162025xk4t7wk4du4d744e.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

上面正則可以匹配除去數字之外的所有字元。

三.定義字元類或者反字元類範圍:

假設我們想匹配26個英文字元,難道我們要把所有26個英文字元都列出來嗎。

字元類已經考慮到這方面的需求。

程式碼如下:

[JavaScript] 純文字檢視 複製程式碼
[a-z]

上面字元類就可以匹配a到z之間26個英文字元。

字元類中a與z之間用橫線連線。

所謂字元類範圍(或者反字元類範圍)就是指定起始於結尾字元,中間使用橫線連線。

本質上,字元類與反字元類範圍只要字元編碼能夠順序排列就可以建立。

[JavaScript] 純文字檢視 複製程式碼
[\u0000-\u00ff]

上面字元類範圍可以匹配所有ASCII字元。

[JavaScript] 純文字檢視 複製程式碼
[^\u0000-\u00ff]

上面反字元類範圍可以匹配所有非ASCII字元。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let str="www.softwhy.com";
let reg=/[h-wab]/g;
console.log(str.match(reg));

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201810/06/162143aujzgj4ecdek7dcs.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

上面程式碼可以匹配a、b和h到w之間的任意字元。

三.預定義字元類:

為了使用方便,正規表示式中預定了一些字元類。

列表如下:

(1).點(.)可以參閱正規表示式 點(.)元字元一章節。

(2).\w可以參閱正規表示式 \w 元字元一章節。

(3).\W可以參閱正規表示式 \W元字元一章節。

(4).\s可以參閱正規表示式 \s 元字元一章節。

(5).\S可以參閱正規表示式 \S 元字元一章節。

(6).\d可以參閱正規表示式 \d 元字元一章節。

(7).\D可以參閱正規表示式 \D 元字元一章節。

預定義字元類的優點是很明顯的,比如我們要匹配一個任意的字母或者數字。

不使用預定字元類程式碼如下:

[JavaScript] 純文字檢視 複製程式碼
[a-zA-Z0-9]

使用預定義字元類程式碼如下:

[JavaScript] 純文字檢視 複製程式碼
\w

四.特殊字元是否需要轉義:

正規表示式中有一些特殊字元,比如點(.)或者美元符號($)。

如果要匹配這些特殊符號本身,通常需要轉義。

程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let str="w.wb";
let reg=/w\./g;
console.log(str.match(reg));

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201810/06/162253hnvnzbww25oqqxvk.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

使用轉義字元可以匹配點自身,否則上述正則將匹配"w."和"wb"。

在字元類中,大多數特殊字元是不需要轉義的。

程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let str="w.wb";
let reg=/[.]/g;
console.log(str.match(reg));

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201810/06/162340w464kve8vbodb6e6.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

字元類中的點就表示它自身,所以只會匹配到字串中的點。

需要進行轉義的特殊字元如下:

(1).\反斜槓,如果匹配它自身必須要轉義。

(2).^,匹配它自身是否需要轉義根據它的位置,如果字元類的起始位置,那麼必須轉義,否則不用。

(3).-,匹配它自身是否需要轉義根據它的位置,如果在字元類的中間位置,那麼必須轉義,否則不用。

程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let str="ab-c^888";
let reg=/[\^0\-9]/g;
console.log(str.match(reg));

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201810/06/162413q9m6qasd4qh1qags.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

如果想要匹配^和-本身,必須要使用轉義字元。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let str="ab-c^888";
let reg=/[-09^]/g;
console.log(str.match(reg));

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201810/06/162444snqcfbch8bpjnccu.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

如果將它們放置於不能使特殊能力生效的位置,就無需使用轉義字元。

當然也可以使用轉義字元,比如那些預定義的字元類。

[JavaScript] 純文字檢視 複製程式碼
[\w]

它可以匹配任意的字元或者數字。

有一個比較特殊的個例,\b在字元類中匹配退格符,但是在字元類外匹配單詞邊界。

相關文章