{
//es5 的正则对象写法
let regex = newRegExp('xyz','i');
let regex2 = newRegExp(/xyz/i);
console.log( regex.test('xyz123') , regex2.test('xyz123') ); //true true
//es6 写法
let regex3 = newRegExp(/xyz/ig,'i'); // 'i' 覆盖ig 第二个修饰符存在会覆盖第一个已经存在的修饰符
console.log(regex3.flags); // i
}
//g与y都是全局匹配 g:从字符开头开始匹配 y:在上一次匹配成功的位置之后开始匹配
{
let s = 'bbb_b_b';
let a1 = /b+/g;
let a2 = /b+/y;
console.log('one' , a1.exec(s) , a2.exec(s)); //a1 = ["bbb", index: 0, input: "bbb_b_b"] a2 = ["bbb", index: 0, input: "bbb_b_b"]
console.log('one' , a1.exec(s) , a2.exec(s)); // a1 = ["b", index: 4, input: "bbb_b_b"] a2 = null
//sticky 检测是否开启了y
console.log(a1.sticky , a2.sticky );//false true
}
//unicode字符 将test后面的内容看成一个字符进行匹配
{
console.log( 'u-1', /^\uD83D/.test('\uD83D\uDC2A') ); //true
console.log('u-2', /^\uD83D/u.test('\uD83D\uDC2A')); //false
console.log('u-3', /\u{61}/.test('a')); //false
console.log('u-4', /\u{61}/u.test('a')); //true
console.log('\u{20BB7}'); //𠮷
let s = '𠮷';
//字符串中大于2个字节,用.号匹配,一定要加上u
console.log('.𠮷', /^.$/.test(s)); //false
console.log('.𠮷-u', /^.$/u.test(s)); //true
console.log('𠮷{2}', /𠮷{2}/.test('𠮷𠮷'));
console.log('𠮷{2}-u', /𠮷{2}/u.test('𠮷𠮷'));
//.不可以识别换行符,回车符,行分隔符,段分割符,这个时候要加s修饰符,但是这个在es6中还没有实现,只是作为一个提案
}