預定義模式指的是某些常見模式的簡寫方式。
* `\d`匹配0-9之間的任一數字,相當于`[0-9]`。
* `\D`匹配所有0-9以外的字符,相當于`[^0-9]`。
* `\w`匹配任意的字母、數字和下劃線,相當于`[A-Za-z0-9_]`。
* `\W`除所有字母、數字和下劃線以外的字符,相當于`[^A-Za-z0-9_]`。
* `\s`匹配空格(包括換行符、制表符、空格符等),相等于`[ \t\r\n\v\f]`。
* `\S`匹配非空格的字符,相當于`[^ \t\r\n\v\f]`。
* `\b`匹配詞的邊界。
* `\B`匹配非詞邊界,即在詞的內部。
下面是一些例子。
~~~
// \s 的例子
/\s\w*/.exec('hello world') // [" world"]
// \b 的例子
/\bworld/.test('hello world') // true
/\bworld/.test('hello-world') // true
/\bworld/.test('helloworld') // false
// \B 的例子
/\Bworld/.test('hello-world') // false
/\Bworld/.test('helloworld') // true
~~~
上面代碼中,`\s`表示空格,所以匹配結果會包括空格。`\b`表示詞的邊界,所以`world`的詞首必須獨立(詞尾是否獨立未指定),才會匹配。同理,`\B`表示非詞的邊界,只有`world`的詞首不獨立,才會匹配。
通常,正則表達式遇到換行符(`\n`)就會停止匹配。
~~~
var html = "<b>Hello</b>\n<i>world!</i>";
/.*/.exec(html)[0]
// "<b>Hello</b>"
~~~
上面代碼中,字符串`html`包含一個換行符,結果點字符(`.`)不匹配換行符,導致匹配結果可能不符合原意。這時使用`\s`字符類,就能包括換行符。
~~~
var html = "<b>Hello</b>\n<i>world!</i>";
/[\S\s]*/.exec(html)[0]
// "<b>Hello</b>\n<i>world!</i>"
~~~
上面代碼中,`[\S\s]`指代一切字符。
- 第一章:變量與作用域
- 第一節:變量
- 第二節:執行環境及作用域
- 第三節:JS 解析機制
- 第四節:垃圾收集
- 第二章:深入函數
- 第一節:概述
- 第二節:函數聲明
- 第三節:函數調用
- 第四節:函數參數
- 第五節:函數返回值
- 第三章:面向對象
- 第一節:概述
- 第二節:對象聲明
- 第三節:this 關鍵字
- 第四節:對象遍歷
- 第五節:對象繼承
- 第六節:模塊
- 第四章:正則表達式
- 第一節:概述
- 第二節:實例屬性
- 第三節:實例方法
- 第一課時:測試
- 第二課時:執行
- 第四節:匹配規則
- 第一課時:字面量字符和元字符
- 第二課時:轉義符
- 第三課時:特殊字符
- 第四課時:字符類
- 第五課時:預定義模式
- 第六課時:重復類
- 第七課時:量詞符
- 第八課時:貪婪模式
- 第九課時:修飾符
- 第十課時:組匹配
- 第五節:字符串的實例方法
- 第一課時:匹配
- 第二課時:搜索
- 第三課時:替換
- 第四課時:分割