修飾符(modifier)表示模式的附加規則,放在正則模式的最尾部。
修飾符可以單個使用,也可以多個一起使用。
~~~
// 單個修飾符
var regex = /test/i;
// 多個修飾符
var regex = /test/ig;
~~~
**(1)g 修飾符**
默認情況下,第一次匹配成功后,正則對象就停止向下匹配了。`g`修飾符表示全局匹配(global),加上它以后,正則對象將匹配全部符合條件的結果,主要用于搜索和替換。
~~~
var regex = /b/;
var str = 'abba';
regex.test(str); // true
regex.test(str); // true
regex.test(str); // true
~~~
上面代碼中,正則模式不含`g`修飾符,每次都是從字符串頭部開始匹配。所以,連續做了三次匹配,都返回`true`。
~~~
var regex = /b/g;
var str = 'abba';
regex.test(str); // true
regex.test(str); // true
regex.test(str); // false
~~~
上面代碼中,正則模式含有`g`修飾符,每次都是從上一次匹配成功處,開始向后匹配。因為字符串`abba`只有兩個`b`,所以前兩次匹配結果為`true`,第三次匹配結果為`false`。
**(2)i 修飾符**
默認情況下,正則對象區分字母的大小寫,加上`i`修飾符以后表示忽略大小寫(ignoreCase)。
~~~
/abc/.test('ABC') // false
/abc/i.test('ABC') // true
~~~
上面代碼表示,加了`i`修飾符以后,不考慮大小寫,所以模式`abc`匹配字符串`ABC`。
**(3)m 修飾符**
`m`修飾符表示多行模式(multiline),會修改`^`和`$`的行為。默認情況下(即不加`m`修飾符時),`^`和`$`匹配字符串的開始處和結尾處,加上`m`修飾符以后,`^`和`$`還會匹配行首和行尾,即`^`和`$`會識別換行符(`\n`)。
~~~
/world$/.test('hello world\n') // false
/world$/m.test('hello world\n') // true
~~~
上面的代碼中,字符串結尾處有一個換行符。如果不加`m`修飾符,匹配不成功,因為字符串的結尾不是`world`;加上以后,`$`可以匹配行尾。
~~~
/^b/m.test('a\nb') // true
~~~
上面代碼要求匹配行首的`b`,如果不加`m`修飾符,就相當于`b`只能處在字符串的開始處。加上`m`修飾符以后,換行符`\n`也會被認為是一行的開始。
- 第一章:變量與作用域
- 第一節:變量
- 第二節:執行環境及作用域
- 第三節:JS 解析機制
- 第四節:垃圾收集
- 第二章:深入函數
- 第一節:概述
- 第二節:函數聲明
- 第三節:函數調用
- 第四節:函數參數
- 第五節:函數返回值
- 第三章:面向對象
- 第一節:概述
- 第二節:對象聲明
- 第三節:this 關鍵字
- 第四節:對象遍歷
- 第五節:對象繼承
- 第六節:模塊
- 第四章:正則表達式
- 第一節:概述
- 第二節:實例屬性
- 第三節:實例方法
- 第一課時:測試
- 第二課時:執行
- 第四節:匹配規則
- 第一課時:字面量字符和元字符
- 第二課時:轉義符
- 第三課時:特殊字符
- 第四課時:字符類
- 第五課時:預定義模式
- 第六課時:重復類
- 第七課時:量詞符
- 第八課時:貪婪模式
- 第九課時:修飾符
- 第十課時:組匹配
- 第五節:字符串的實例方法
- 第一課時:匹配
- 第二課時:搜索
- 第三課時:替換
- 第四課時:分割