ES项目学习笔记(四)正则的扩展

RegExp构造函数

写正则时基本上都是直接以//定义了,不看还差点忘了有个构造函数RegExp,这个构造参数有两种用法,一种是直接传入正则表达式,一种是传入两个字符串参数的,es6中扩展多了一种传参情况。

{
    //es5之前3种相同的定义一个正则的方式
    let regex_old = /xyz/i;
    let regex_old1 = new RegExp(/xyz/i);    
    let regex_old2 = new RegExp('xyz','i');

    //es6 在传入一个正则表达式还可以传入一个参数表示修饰符,会覆盖正则表达式中的修饰符
    let regex_new = new RegExp(/xyz/ig,'i');
    console.log(new RegExp(/xyz/ig).flags); //gi
    console.log(new RegExp(/xyz/ig,'i').flags); //i
}

u 修饰符

扩展该修饰符主要是用来正确处理大于\uFFFF的 Unicode 字符。用以更正以下正则表达式的行为:

  • 点字符

点(.)字符不能识别码点大于0xFFFF的Unicode字符,必须加上u修饰符。

let s = '';
点(.)字符在正则表达式中,含义是除了换行符以外的任意单个字符
{
    console.log('大于0xFFFF的Unicode字符',/^.$/.test(s)); // false
    console.log('使用u字符',/^.$/u.test(s)); // true
}
  • Unicode 字符表示

es6使用{}表示一個 Unicode 字符,如果在正则中使用必须要加上u修饰符,否则会被解读为量词
{
console.log(/\u{61}/.test('a')); // false
console.log(/\u{61}/u.test('a')); // true
console.log(/\u{20BB7}/u.test('')); // true
}

  • 量词

使用u修饰符后,所有量词都会正确识别大于码点大于0xFFFF的Unicode字符。

{
    console.log('量词',/a{2}/.test('aa')); // true
    console.log('量词',/a{2}/u.test('aa')); // true
    console.log('量词',/{2}/.test('')); // false
    console.log('量词',/{2}/u.test('')); // true
}
  • 预定义模式

\S匹配所有非空白字符。

{
    /^\S$/.test('') // false
    /^\S$/u.test('') // true
}
  • i 修饰符

\u004B与\u212A都是大写的K。不加u修饰符,就无法识别非规范的K字符。

/[a-z]/i.test('\u212A') // false
/[a-z]/iu.test('\u212A') // true
  • 转义

没有u修饰符的情况下,正则中没有定义的转义(如逗号的转义,)无效,而在u模式会报错。

/\,/ // /\,/
/\,/u // 报错

y 修饰符

let s = 'bbbb_bbb_bb_b';
var a1 = /b+/g;
var a2 = /b+/y;

console.log(a1.exec(s), a2.exec(s)); // ["bbbb"],["bbbb"]
console.log(a1.exec(s), a2.exec(s)); // ["bbb"],null

console.log(a1.sticky, a2.sticky); //表示是否开启了粘连模式

在看这一部分内容时发现对正则的掌握程度真的很差,导致很多内容都都是新的,待后面对正则再进行系统的学习后,再补充。先记录到此。

你可能感兴趣的:(ES项目学习笔记(四)正则的扩展)