正则扩展
2017-09-19 本文已影响0人
bjhu电net
正则新特性
构造函数的变化,正则方法的扩展,u修饰符,y修饰符,s修饰符
es5正则的写法
{
//es5声明正则
let regex=new RegExp('xyz','i')//i忽略大小写
let regex2=new RegExp(/xyz/i);
console.log(regex.test('xyz123'),regex2.test('456xyz'))
}
es6新增
{
//es6声明正则(增加)
let regex3=new RegExp(/xyz/ig,'i');
console.log(regex3.flags);
//es6中允许第一个是正则表达式的参数,第二个参数会覆盖掉ig修饰符!
//flags用来获取正则表达式的修饰符
}
y修饰符
{
//修饰符g和y都是全局匹配,不同点是:g修饰符会继续匹配,y修饰符会先继续匹配_符号
let s='bbb_bb_b';
let a1=/b+/g;
let a2=/b+/y;
console.log('one',a1.exec(s),a2.exec(s))
console.log('two',a1.exec(s),a2.exec(s))
//one ["bbb", index: 0, input: "bbb_bb_b"] ["bbb", index: 0, input: "bbb_bb_b"]
//two ["bb", index: 4, input: "bbb_bb_b"] null
console.log(a1.sticky,a2.sticky);
//sticky判断是否开启了y修饰符
// false true
}
u修饰符
{
//u是处理unicode字符时候用的
console.log('u-1',/^\uD83D/.test('\uD83D\uDC2A'));
//u-1 true
console.log('u-2',/^\uD83D/u.test('\uD83D\uDC2A'));
//u-2 false
//第一个四个字节当成了两个字母/字符,u修饰符会把四个字节当成一个字符
console.log(/\u{61}/.test('a'))
console.log(/\u{61}/u.test('a'))
//false true
//{}包起来会当作成为unicode字符,不加u修饰符的话不会被识别
console.log(`\u{20BB7}`)
//𠮷
let s='𠮷';
console.log('u',/^.$/.test(s))
//false
console.log('u',/^.$/u.test(s))
//true
console.log('test',/𠮷{2}/.test('𠮷𠮷'));
//false
console.log('test',/𠮷{2}/u.test('𠮷𠮷'));
//true
}
如果字符串中有字符大于2个字节,一定要加上u修饰符才能被识别;正则中并不是匹配到所有的字符,小于2个字节的符号可以匹配到,其他的不能匹配,换行符,回车符,行分隔符以及段分隔符.都不能匹配到。可以用s修饰符。