修饰符(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 关键字
- 第四节:对象遍历
- 第五节:对象继承
- 第六节:模块
- 第四章:正则表达式
- 第一节:概述
- 第二节:实例属性
- 第三节:实例方法
- 第一课时:测试
- 第二课时:执行
- 第四节:匹配规则
- 第一课时:字面量字符和元字符
- 第二课时:转义符
- 第三课时:特殊字符
- 第四课时:字符类
- 第五课时:预定义模式
- 第六课时:重复类
- 第七课时:量词符
- 第八课时:贪婪模式
- 第九课时:修饰符
- 第十课时:组匹配
- 第五节:字符串的实例方法
- 第一课时:匹配
- 第二课时:搜索
- 第三课时:替换
- 第四课时:分割