{
let regex=new RegExp('xyz','i');
let regex2=new RegExp(/xyz/i);
console.log(regex.test('xyz123'),regex2.test('xyz123'));
let regex3 = new RegExp(/xyz/ig,'i');//这种写法后面的修饰符会覆盖掉前面的修饰符,所以下面打印出俩是i
console.log(regex3.flags);//flags es6新增的获取修饰符的属性
}
打印结果:true true i
y修饰符
{
let s='bbb_bb_b';
let a1=/b+/g; //es5建一个正则对象
let a2=/b+/y;
console.log('one',a1.exec(s),a2.exec(s));
console.log('two',a1.exec(s),a2.exec(s));
//y修饰符和g修饰符都是全局匹配,不同点在于g在任何一个位置匹配上都算,y修饰符是必须是第一个
//如何判断当前的正则对象是不是开启了y修饰符的这种模式?
console.log(a1.sticky,a2.sticky);//es6中增加了sticky属性,该属性打印为true时开启了。
}
打印结果:
one
["bbb", index: 0, input: "bbb_bb_b", groups: undefined]
["bbb", index: 0, input: "bbb_bb_b", groups: undefined]
two
["bb", index: 4, input: "bbb_bb_b", groups: undefined]
null
false true
u修饰符
console.log('u-1',/^\uD83D/.test('\uD83D\uDC2A'));
//不使用u修饰符的时候,\uD83D\uDC2A会被当成两个字符,前面D83D是两个字节所以匹配成功
console.log('u-2',/^\uD83D/u.test('\uD83D\uDC2A'));
//使用u修饰符的时候,\uD83D\uDC2A会被当成一个字符
console.log(/\u{61}/.test('a'));
//大括号包起来的内容是一个UNICODE字符的,如果不使用u修饰符的话是不会被识别的
console.log(/\u{61}/u.test('a'));
console.log(`\u{20BB7}`);
let s='𠮷';
console.log('u',/^.$/.test(s));//.并不能匹配所有字符,只能匹配小于两个字节长度的字符
console.log('u-2',/^.$/u.test(s));
//如果你的字传中 有的字符是大于两个字节的 一定要加上u修饰符才能正确的识别
console.log('test',/𠮷{2}/.test('𠮷𠮷'));
console.log('test-2',/𠮷{2}/u.test('𠮷𠮷'));
//如果处理的字符串中,正则表达式中有大于两个字节长度的字符,一定要加u修饰符
打印结果:
u-1 true
u-2 false
false
true
𠮷
u false
u-2 true
test false
test-2 true
网友评论