正则表达式修饰符
1. i (不区分大小写)
/abc/i 可以匹配 abc、aBC、Abc
2. m (多行匹配)
若存在换行\n并且有开始^或结束$符的情况下,和g一起使用实现全局匹配,
因为存在换行时默认会把换行符作为一个字符任务匹配字符串是个单行,
g只匹配第一行,添加m之后实现多行,每个换行符之后就是开始
var str = "abcggab\nabcoab";
var preg1 = /^abc/gm; str.match(preg1) // 结果为:["abc", "abc"]
var preg2 = /ab$/gm; str.match(preg2) // 结果为:["ab", "ab"]
3. g (全局匹配 )
如果不带g,正则过程中字符串从左到右匹配,找到第一个符合条件的即匹配成功,返回
如果带g,则字符串从左到右,找到每个符合条件的都记录下来,知道字符串结尾位置
var str = 'aaaaaaaa'
var reg1 = /a/; str.match(reg1)
// 结果为:["a", index: 0, input: "aaaaaaaa"]
var reg2 = /a/g; str.match(reg2)
// 结果为:["a", "a", "a", "a", "a", "a", "a", "a"]
4. y修饰符(ES6新增)
除了u修饰符,ES6还为正则表达式添加了y修饰符,叫做“粘连”(sticky)修饰符。
y修饰符的作用与g修饰符类似,也是全局匹配,后一次匹配都从上一次匹配成功的下一个位置开始。不同之处在于,g修饰符只要剩余位置中存在匹配就可,而y修饰符确保匹配必须从剩余的第一个位置开始,这也就是“粘连”的涵义
let str = 'bbb_bb_b';
let reg1 = /b+/g; //+ 号代表前面的字符必须至少出现一次(1次或多次)
let reg2 = /b+/y;
console.log(reg1.exec(str)); //bbb
console.log(reg2.exec(str)); //bbb
console.log(reg1.exec(str)); //bb
console.log(reg2.exec(str)); //null
/*
g和y的区别:
g:第一次三个bbb结束以后,第二次只要有b就行
y:第一次三个bbb结束以后,后边的第一字符必须是b
*/
}
runoo+b,可以匹配 runoob、runooob、runoooooob 等,+ 号代表前面的字符必须至少出现一次(1次或多次)。
runoo*b,可以匹配 runob、runoob、runoooooob 等, *号代表字符可以不出现,也可以出现一次或者多次(0次、或1次、或多次)。
colou?r 可以匹配 color 或者 colour,? 问号代表前面的字符最多只可以出现一次(0次、或1次)。
5. u修饰符(ES6新增)
用来正确处理大于\uFFFF的Unicode字符
/^\uD83D/.test('\uD83D\uDC2A') // true
/^\uD83D/u.test('\uD83D\uDC2A') // false