首页 > 代码库 > ES6-----学习系列三(正则扩展)

ES6-----学习系列三(正则扩展)

一、es6在正则方面主要是增加了一些新的方法及一些修饰符,下面一一列出

  

// 字符串对象的4个使用正则表达式的方法: match(),replace(),search(),split()这四个方法全部调用RegExp的实例的方法。

{
    let regex = new RegExp(‘xyz‘, ‘ig‘);
    console.log(regex.test(‘xyz0XYZ1xyz2‘), regex.exec(‘xyz0XYZ1xyz2‘));
}

  ①构造函数不同

{
    // #构造函数#
    let regex = new RegExp(‘xyz‘, ‘i‘); //第一个参数是字符串,第二个是修饰符
    let regex2 = new RegExp(/xyz/i); //第一个参数是正则表达式,不接受第二个参数,否则会报错
    console.log(regex.test(‘xyz123‘), regex2.test(‘xyz123‘));
    console.log(regex.test(‘xyZ123‘), regex2.test(‘xyZ123‘));
     //es6中可以接受第二个参数,第二个会覆盖第一个修饰符 let regex3
= new RegExp(/abc/ig, ‘i‘); console.log(regex3.flags); //原有正则对象的修饰符是ig,它会被第二个参数i覆盖 }

  ②新增修饰符

    y修饰符(也g一样也是全局匹配,g不强调下一次匹配的位置,而y必须是下一次匹配的第一个字符)    

{
    // 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); //表示是否开启了粘连模式(是否开启y) 输出false true
}

    u修饰符(这个修饰符不知道啥用途,感觉实际工作不会用太多吧 ,了解一下就行了)

{
    console.log(‘u修饰符‘,/^\uD83D/.test(‘\uD83D\uDC2A‘)); // true
    console.log(‘u修饰符‘,/^\uD83D/u.test(‘\uD83D\uDC2A‘)); // false
    // 大括号表示Unicode字符,只有加上u才能识别
    console.log(/\u{61}/.test(‘a‘)); // false
    console.log(/\u{61}/u.test(‘a‘)); // true
    console.log(/\u{20BB7}/u.test(‘??‘)); // true
    // 点(.)字符不能识别码点大于0xFFFF的Unicode字符,必须加上u修饰符。
    let s = ‘??‘;
    console.log(‘大于0xFFFF的Unicode字符‘,/^.$/.test(s)); // false
    console.log(‘使用u字符‘,/^.$/u.test(s)); // 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
}

   补充其他

{
    // #正则表达式中,点(.)是一个特殊字符,代表任意的单个字符,但是行终止符(line terminator character)除外
    // U+000A 换行符(\n)
    // U+000D 回车符(\r)
    // U+2028 行分隔符(line separator)
    // U+2029 段分隔符(paragraph separator)
    // 只是一个提案目前还不支持
    // let reg=/test.go/s;
    // console.log(reg.test(‘test\ngo‘));
    // console.log(reg.test(‘test\ngo‘));
    console.log(‘s变通方法‘,/foo.bar/.test(‘foo\nbar‘));
    console.log(‘s变通方法‘,/foo[^]bar/.test(‘foo\nbar‘));
}

 

ES6-----学习系列三(正则扩展)