大部分字符在正則表達式中,就是字面的含義,比如`/a/`匹配`a`,`/b/`匹配`b`。如果在正則表達式之中,某個字符只表示它字面的含義(就像前面的`a`和`b`),那么它們就叫做“字面量字符”(literal characters)。
~~~
/dog/.test('old dog') // true
~~~
上面代碼中正則表達式的`dog`,就是字面量字符,所以`/dog/`匹配`old dog`,因為它就表示`d`、`o`、`g`三個字母連在一起。
除了字面量字符以外,還有一部分字符有特殊含義,不代表字面的意思。它們叫做“元字符”(metacharacters),主要有以下幾個。
**(1)點字符(.)**
點字符(`.`)匹配除回車(`\r`)、換行(`\n`) 、行分隔符(`\u2028`)和段分隔符(`\u2029`)以外的所有字符。注意,對于碼點大于`0xFFFF`字符,點字符不能正確匹配,會認為這是兩個字符。
~~~
/c.t/
~~~
上面代碼中,`c.t`匹配`c`和`t`之間包含任意一個字符的情況,只要這三個字符在同一行,比如`cat`、`c2t`、`c-t`等等,但是不匹配`coot`。
**(2)位置字符**
位置字符用來提示字符所處的位置,主要有兩個字符。
* `^`表示字符串的開始位置
* `$`表示字符串的結束位置
~~~
// test必須出現在開始位置
/^test/.test('test123') // true
// test必須出現在結束位置
/test$/.test('new test') // true
// 從開始位置到結束位置只有test
/^test$/.test('test') // true
/^test$/.test('test test') // false
~~~
**(3)選擇符(`|`)**
豎線符號(`|`)在正則表達式中表示“或關系”(OR),即`cat|dog`表示匹配`cat`或`dog`。
~~~
/11|22/.test('911') // true
~~~
上面代碼中,正則表達式指定必須匹配`11`或`22`。
多個選擇符可以聯合使用。
~~~
// 匹配fred、barney、betty之中的一個
/fred|barney|betty/
~~~
選擇符會包括它前后的多個字符,比如`/ab|cd/`指的是匹配`ab`或者`cd`,而不是指匹配`b`或者`c`。如果想修改這個行為,可以使用圓括號。
~~~
/a( |\t)b/.test('a\tb') // true
~~~
上面代碼指的是,`a`和`b`之間有一個空格或者一個制表符。
其他的元字符還包括`\`、`\*`、`+`、`?`、`()`、`[]`、`{}`等。
- 第一章:變量與作用域
- 第一節:變量
- 第二節:執行環境及作用域
- 第三節:JS 解析機制
- 第四節:垃圾收集
- 第二章:深入函數
- 第一節:概述
- 第二節:函數聲明
- 第三節:函數調用
- 第四節:函數參數
- 第五節:函數返回值
- 第三章:面向對象
- 第一節:概述
- 第二節:對象聲明
- 第三節:this 關鍵字
- 第四節:對象遍歷
- 第五節:對象繼承
- 第六節:模塊
- 第四章:正則表達式
- 第一節:概述
- 第二節:實例屬性
- 第三節:實例方法
- 第一課時:測試
- 第二課時:執行
- 第四節:匹配規則
- 第一課時:字面量字符和元字符
- 第二課時:轉義符
- 第三課時:特殊字符
- 第四課時:字符類
- 第五課時:預定義模式
- 第六課時:重復類
- 第七課時:量詞符
- 第八課時:貪婪模式
- 第九課時:修飾符
- 第十課時:組匹配
- 第五節:字符串的實例方法
- 第一課時:匹配
- 第二課時:搜索
- 第三課時:替換
- 第四課時:分割