1 //正则扩展 2 { 3 let regex=new RegExp('xyz','i'); 4 let regex2=new RegExp(/xyz/i); 5 6 console.log(regex.test('xyz123'),regex2.test('xy')); 7 //后面的修饰符i覆盖原来的ig修饰符 8 let regex3=new RegExp(/xyz/ig,'i'); 9 console.log(regex3.flags); 10 } 11 12 { 13 let s='bbb_bb_b'; 14 //g,y都是全局匹配 15 let a1=/b+/g; 16 let a2=/b+/y; 17 console.log('one:',a1.exec(s),a2.exec(s));//第一次都是从头开始匹配,bbb 18 console.log('two:',a1.exec(s),a2.exec(s));//第二次,g会忽略_直接bb,y不会忽略,所以匹配不到 19 //sticky查看是否开启了y修饰符 20 console.log(a1.sticky,a2.sticky); 21 } 22 23 //ES6 对正则表达式添加了 u 修饰符,含义为 "Unicode模式",用来正确处理大于 \uFFFF 的Unicode字符。也就是说,会正确处理四个字符的 UTF-16 编码。 24 //字符串大于两个字节的要加上u 25 { 26 console.log('u-1',/^\uD83D/.test('\uD83D\uDC2A'));//true 27 console.log('u-2',/^\uD83D/u.test('\uD83D\uDC2A')); //false 28 //上面代码中,\uD83D\uDC2A 是一个四字节的UTF-16 编码,代表一个字符,但是,ES5不支持四个字节的 UTF-16 编码,会将其识别为两个字符,导致第一行代码结果为 true ,加了u修饰符以后,ES6就会识别其为一个字符,所以第二行代码结果为false。 29 //一旦加上 u 修饰符号,就会修改下面这些正则表达式的行为 30 31 console.log(/\u{61}/.test('a'));//false 32 console.log(/\u{61}/u.test('a'));//true 33 } 34 //点(.)字符在正则表达式中,含义是除了换行符以外的任意单个字符。对于码点大于 oxFFFF 的 Unicode 字符,点字符不能识别,必须加上 u 修饰符。 35 { 36 console.log(`\u{20BB7}`); 37 let s='𠮷'; 38 console.log('u',/^.$/.test(s));//false 39 console.log('u',/^.$/u.test(s));//true. 40 41 console.log('test',/𠮷{2}/.test('𠮷𠮷'));//false 42 console.log('test',/𠮷{2}/u.test('𠮷𠮷'));//true 43 }