正則表達式有兩種定義方式,一種是使用雙正斜杠將正則表達式的式子括起來,例如 var re1 = /^\d$/ ;一種是使用創建正則表達式對象的方式,這種情況下正則表達式作為一個字符串,用雙引號包裹,例如 var re1 = new RegExp(“^\\d$”)。從這兩種示例中可以看出雖然表達同樣的意思,但是使用的正則表達式卻有一些區別,區別之處就在反斜杠的使用。
反斜杠代表轉義字符,用在所有字符串中,正則表達式作為一種超級字符串,和字符串一樣遵循轉義字符的條件,點在正則表達式中代表任意字符的匹配,以點為例討論反斜杠在正則表達式中定義時的使用。
在第一種定義方式中,討論 /23\\.34/ 和 /23\.34/ 的區別,代碼如下。結論:在這種定義方式下不能用雙反斜杠,否則會將轉義字符轉義為一個普通字符反斜杠。
在第二種定義方式中,討論 new RegExp("23\.34") 、new RegExp("23.34") 和 new RegExp("23\\.34")的區別,代碼如下。結論:在這種定義方式下由於是將正則表達式放在字符串中,因此若想讓點成為一個普通點,因此需要使用雙反斜杠。
核心之處在於反斜杠適用在所有字符串中,正則表達式作為超級字符串同樣適用,而在進行匹配、測試等情況時,免不了要同時使用正則表達式和字符串,要注意理清自己的思路。