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 }

 

posted on 2018-06-21 14:09  chenlw101  阅读(89)  评论(0编辑  收藏  举报