正則表達式中那些有特殊含義的元字符,如果要匹配它們本身,就需要在它們前面要加上反斜杠。比如要匹配`+`,就要寫成`\+`。
~~~
/1+1/.test('1+1')
// false
/1\+1/.test('1+1')
// true
~~~
上面代碼中,第一個正則表達式之所以不匹配,因為加號是元字符,不代表自身。第二個正則表達式使用反斜杠對加號轉義,就能匹配成功。
正則表達式中,需要反斜杠轉義的,一共有12個字符:`^`、`.`、`[`、`$`、`(`、`)`、`|`、`*`、`+`、`?`、`{`和`\`。需要特別注意的是,如果使用`RegExp`方法生成正則對象,轉義需要使用兩個斜杠,因為字符串內部會先轉義一次。
~~~
(new RegExp('1\+1')).test('1+1')
// false
(new RegExp('1\\+1')).test('1+1')
// true
~~~
上面代碼中,`RegExp`作為構造函數,參數是一個字符串。但是,在字符串內部,反斜杠也是轉義字符,所以它會先被反斜杠轉義一次,然后再被正則表達式轉義一次,因此需要兩個反斜杠轉義。
- 第一章:變量與作用域
- 第一節:變量
- 第二節:執行環境及作用域
- 第三節:JS 解析機制
- 第四節:垃圾收集
- 第二章:深入函數
- 第一節:概述
- 第二節:函數聲明
- 第三節:函數調用
- 第四節:函數參數
- 第五節:函數返回值
- 第三章:面向對象
- 第一節:概述
- 第二節:對象聲明
- 第三節:this 關鍵字
- 第四節:對象遍歷
- 第五節:對象繼承
- 第六節:模塊
- 第四章:正則表達式
- 第一節:概述
- 第二節:實例屬性
- 第三節:實例方法
- 第一課時:測試
- 第二課時:執行
- 第四節:匹配規則
- 第一課時:字面量字符和元字符
- 第二課時:轉義符
- 第三課時:特殊字符
- 第四課時:字符類
- 第五課時:預定義模式
- 第六課時:重復類
- 第七課時:量詞符
- 第八課時:貪婪模式
- 第九課時:修飾符
- 第十課時:組匹配
- 第五節:字符串的實例方法
- 第一課時:匹配
- 第二課時:搜索
- 第三課時:替換
- 第四課時:分割