在 ES5 中,RegExp构造函数的参数有两种情况。
第一种情况是,参数是字符串,这时第二个参数表示正则表达式的修饰符(flag)。
第二种情况是,参数是一个正则表示式,这时会返回一个原有正则表达式的拷贝。
但是,ES5 不允许此时使用第二个参数添加修饰符,否则会报错。
ES6 改变了这种行为。如果RegExp构造函数第一个参数是一个正则对象,那么可以使用第二个参数指定修饰符。而且,返回的正则表达式会忽略原有的正则表达式的修饰符,只使用新指定的修饰符。
正则表达式的拓展
在es5中的正则写法
1 2 3 4 5 6 7
| { let reg1 = new RegExp('xyz', 'i'); let reg2 = new RegExp(/xyz/i); console.log(reg1.test('xYz123'), reg2.test('xyZ123')); }
|
es6 中的写法
1 2 3 4 5 6 7 8
| { let reg = new RegExp(/xyz/ig, 'i'); console.log(reg.flags); }
|
新增的 修饰符 y u
y 修饰符
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| { let string = 'bbb_b_b'; let reg1 = /b+/g; let reg2 = /b+/y; console.log('one', reg1.exec(string), reg2.exec(string)); console.log('two', reg1.exec(string), reg2.exec(string)); console.log(reg1.sticky, reg2.sticky); }
|
u 修饰符 Unicode 字符的处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| { console.log('u-1', /^\uD83D/.test('\uD83D\uDC2A')); console.log('u-2', /^\uD83D/u.test('\uD83D\uDC2A')); console.log(/\u{61}/.test('a')); console.log(/\u{61}/u.test('a')); console.log(`\u{20BB9}`); let str = '𠮹'; console.log('u-1', /^.$/.test(str)); console.log('u-2', /^.$/u.test(str)); console.log('u-3', /𠮹{2}/.test('𠮹𠮹')); console.log('u-4', /𠮹{2}/u.test('𠮹𠮹')); }
|