正規表示式 轉義字元

admin發表於2018-10-16

既然是轉義字元,自然是將字元原本的意義轉換為其他意義。

轉義字元以反斜槓開頭,後面跟著一個或者多個普通字元。

程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
console.log("本站的url地址是:\nhttp://www.softwhy.com")

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

a:3:{s:3:\"pic\";s:43:\"portal/201810/16/204523euzbcvdveu1qm60v.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

"n"本來是一個極為普通的字元,但是前面加上反斜槓之後它具有了換行功能。

更多關於轉義字元的介紹可以參閱JavaScript 轉義字串一章節。

本文將通過程式碼例項介紹一下轉義字元在正規表示式中常見的應用。

一.建構函式引數中的應用:

使用建構函式可以建立正規表示式物件。

建構函式引數中會經常使用轉義字元,具體參閱JavaScript 建立正規表示式一章節。

二.轉義字元生成元字元:

關於元字元的概念可以參閱正規表示式元字元與普通字元一章節。

正規表示式中有很多元字元,大部分元字元都是利用轉義字元生成的。

比如"\d",有反斜槓加字元"d"構成,它可以匹配單個數字字元。

程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let str="an5an5"; 
let reg=new RegExp("\\d","g"); 
console.log(str.match(reg));

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

a:3:{s:3:\"pic\";s:43:\"portal/201810/16/204656hbn085t555bm0mzm.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

上述正規表示式可以匹配字串中的數字。

三.匹配正規表示式中的特殊字元:

正規表示式中,有些字元具有特殊意義,如果想匹配這些字元自身則需要使用轉義字元。

比如點(.)、問號(?)、加號(+)或者括號等,程式碼例項如下:

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

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

a:3:{s:3:\"pic\";s:43:\"portal/201810/16/204729pg1opxbw2l62pxg3.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

上面正規表示式並不能匹配任何內容。

因為程式碼中的加號(+)是一個重複量詞,表示可以重複前面匹配一次或者多次。

並不能匹配加號本身,程式碼修改如下:

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

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

a:3:{s:3:\"pic\";s:43:\"portal/201810/16/204755cvwx244bf942d6dv.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

採用轉義字元後,可以正確匹配到相應字串。

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

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

a:3:{s:3:\"pic\";s:43:\"portal/201810/16/204821k11q9vhqnn92vann.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

上面程式碼的本意是要匹配字串"(b)",但是僅匹配到字元"b"。

這是因為小括號可以形成正規表示式分組,具體參閱正規表示式 分組一章節。

程式碼修改如下:

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

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

a:3:{s:3:\"pic\";s:43:\"portal/201810/16/204916ss88go797v3z9g9b.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

應用轉義字元之後,完美實現預期效果。

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

四.轉義字元在字元類中的應用:

字元類中,特殊字元通常不需要轉義,程式碼例項如下:

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

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

a:3:{s:3:\"pic\";s:43:\"portal/201810/16/205000bzik2hk07u9zrhjh.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

字元類中的都是特殊字元,完全不需要轉義就可以匹配它們自身。

不需要轉義不代表不能轉義,完全可以使用轉義字元形式,當然這純粹是自找麻煩的操作。

程式碼如下:

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

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

a:3:{s:3:\"pic\";s:43:\"portal/201810/16/205034svnnczfdsf3yjsdd.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

字元類中需要轉義的特殊字元如下:

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

(2).匹配^與-自身是否需要轉義,要看它們具體的位置。

程式碼例項如下:

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

如果^處於字元類的起始位置,要匹配其自身,必須使用轉義字元。

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

如果橫槓位於連續字元或者數字之間,如果要匹配其自身,必須使用轉義字元。

相關文章