正则修饰符
正则表达式的修饰符是用于指定额外的匹配策略,该修饰符不在正则表达式中,放在正则表达式外 正则修饰符包含
- g 全局匹配
- 正则表达式中没有 ^ 时,以整个字符串(单行/多行)的开头为开始(^),以整个字符串(单行/多行)的结尾为结束($)
- 正则表达式中含有 ^ 时,只匹配第一行
- m 多行匹配
- 启用多行模式后,只影响 ^ 和 $ 的行为
- 通常与全局匹配一起使用,否则也只匹配第一行
- i 忽略大小写匹配
默认情况下是非全局匹配,非多行匹配,大小敏感匹配
修饰符使用方式
let exp1 = /abc/i;
console.log( "ABC".match(exp1) ); // ["ABC"]
let exp2 = new RegExp('abc', 'i');
console.log( "ABC".match(exp2) ); // ["ABC"]
全局匹配修饰符 g
let txt = `hello world1\nhello world2`
// 默认情况下只匹配第一个匹配项
console.log( txt.match(/hello/) ); // ["hello"]
// 使用 全局匹配修饰符g 后,会返回所有的匹配项
console.log( txt.match(/hello/g) ); // ["hello","hello"]
// 在使用 全局匹配修饰符 时,如果正则中包含 ^ 时,只会匹配第一行
console.log( txt.match(/^hello/g) ); // ["hello"]
// 在使用 全局匹配修饰符 时,如果正则中没有 ^, 有 $ 时,匹配的是整个字符串的结尾
console.log( txt.match(/world1$/g) ); // null
console.log( txt.match(/world2$/g) ); // ["world2"]
多行匹配修饰符 m
let txt = `hello world1\nhello world2`
// 默认情况下只匹配第一个匹配项
console.log( txt.match(/hello/) ); // ["hello"]
// 使用 多行匹配修饰符m 后,由于没使用全局匹配,所以也只会匹配第一行
console.log( txt.match(/hello/m) ); // ["hello"]
// 同时使用 多行匹配修饰符m 与 全局匹配修饰符g,会匹配所有行
console.log( txt.match(/^hello/gm) ); // "hello","hello"]
忽略大小写修饰符 i
let txt = `hello world1\nhello world2`
// 默认情况下匹配大小写敏感
console.log( txt.match(/HELLO/) ); // null
// 使用 护理大小写修饰符i 后,忽略大小写匹配
console.log( txt.match(/HELLO/i) ); // ["hello"]