20200415

@xiaojingzhao

Plan

  • 你不知道的 js 下卷第二章

Notes

正则表达式

unicode 标识

let reg1 = /^.-123/u;
let reg2 = /^.-123/;
str = "♪-1234";
reg1.test(str); // true
reg2.test(str); // v8下为true -- 理论上应该为false, 这个特殊的音符会被处理成两个字符,所以无法匹配成功

定点标识

从某个特定 index 开始匹配,默认为 0

非定点例子:

let reg = /foo/;
let str = "+++foo++";
reg.lastIndex; // 0;
reg.test(str); // true

reg.lastIndex = 20;
reg.test(str); // true
reg.lastIndex; // 20 -- 不受影响

定点例子:

let reg = /foo/y;
let str = "+++foo++";
reg.lastIndex; // 0;
reg.test(str); // false -- 在0处匹配不到
reg.lastIndex; // 0 -- 匹配失败,lastIndex会自动切换回0

reg.lastIndex = 3; // 必须手动设置lastIndex
reg.test(str); // true
reg.lastIndex; // 6 -- 往前移动到匹配字符串的结束位置

全局模式

全局模式可以和 exec(...) 方法结合使用

flags

let reg = /foo/gi;
reg.flags; // gi

More