美文网首页
ECMAScript6--4.正则扩展

ECMAScript6--4.正则扩展

作者: 飞菲fly | 来源:发表于2017-10-18 11:23 被阅读19次

1.正则新增特性

  • 构造函数的变化
  • 正则方法的扩展
    字符串处理的一些正则方法,在ES6中已经是调用了正则对象的方法;
  • u修饰符
  • y修饰符
  • s修饰符

eg1.构造函数发生的变化
ES6的写法:
1.允许第一个参数是正则表达式的方式;
2.允许第二个参数在去填写这个修饰符,结果就是后面的修饰符会覆盖前边正则表达式所用的修饰符;

    {
    //ES5中正则第一种写法:两个参数(第一个参数必须是字符串)
    let regex = new RegExp('xyz','i');//i忽略大小写

    //ES5中第二种写法:1个参数
    let regex2 = new RegExp(/xyz/i);
    
    console.log(regex.test('xyz123'),regex2.test('xyz123'));//true true
         
    //ES6的写法:      
    flags 获取正则对象修饰符的一个属性;        
    //用这种方法生成构造函数,第二个参数的修饰符会覆盖第一个参数所指定的ig修饰符
    let regex3 = new RegExp(/xyz/ig,'i');
    console.log(regex3.flags); //i

}

2.y修饰符
--gy修饰符都是全局匹配;
* 全局匹配的不同点是:
g:是从上一次匹配的位置继续寻找直到找到匹配的位置开始;
不强调是必须是在我匹配的下一个字符开始匹配;
(不强调必须是第一个就匹配上,中间任何位置匹配上都算)
y:匹配的第一个必须是紧跟着的下一个字符开始匹配成功才算;

{
    let s ='bbb_bb_b';
    let a1 = /b+/g;
    let a2 =/b+/y;
    
    console.log('one',a1.exec(s),a2.exec(s));
    //输出:
    one {"bbb",index:0,input:"bbb_bb_b"}     {"bbb",index:0,input:"bbb_bb_b"}
    
    console.log('two',a1.exec(s),a2.exec(s));
    //输出:
    1.用g做修饰符a1继续匹配到了“bb”;
    2.用y做修饰符最后匹配的结果是null;
    bbb之后第一个是_(下划线)已经不满足b+这种匹配模式,导致匹配失败;
    two {"bb",index:4,input:"bbb_bb_b"}  null
    
    
    // *如何判断当前的正则对象是不是开启了粘连模式(y修饰符这种模式);
    ---sticky
    console.log(a1.sticky,a2.sticky);//false true

}

3.u修饰符--u(unicode的缩写)
在正则处理unicode字符的时候的一个特征值;
* u修饰符作用:
1.处理的字符串正则表达式中有大于两个字节长度的字符,一定要加u;
2.点字符(.)并不是能匹配所有的字符;条件是:要小于两个字节长度的一个字符;

{
    // /^uD83D/匹配模式  '\uD83D\uDC2A'匹配字符串
    console.log('u-1',/^uD83D/.test('\uD83D\uDC2A'));
//u-1 true 没加u会把4个字节当成了两个字母或两个字符;这个对应的是两个字符;所以可以匹配成功;
    console.log('u-2',/^uD83D/u.test('\uD83D\uDC2A'));
    //u-2 false u会把4个字节当做一个字符;相当于unicode中一个编码对应的一个字符;

    //{61}是作为一个unicode字符的,不加u是不会被识别的;
    console.log(/\u{61}/.test('a')); //false
    //大括号里面放的是unicode编码,一定要加上u修饰符才能被js解释器成功识别
    console.log(/\u{61}/u.test('a')); //true

--*原来正则匹配中有个点字符(.)可以代表任意字符,这个点字符只是能识别小于0xf这么一个unicode
   字符;如果这个字符的unicode编码超过两个字节就没法识别了;
 --点字符有四个字符是不能处理的:换行符、回车符、行分隔符、段分隔符;
 --点字符在u修饰符下可以识别超过两个字节长度的unicode字符,但是遇到换行符、回车符、行分隔符、
     段分隔符,这个要加s修饰符(ES6目前没有实现);
   
    \u{}表示是一个unicode编码;
    
     console.log('\u{20BB7}');//吉
     
     let s='吉';
     console.log('u',/^.$/.test(s));//u false
     console.log('u-2',/^.$/u.test(s));//u-2 true

*---如果你的字符串中有的字符是大于两个字节的,一定要加u修饰符,才能正确的去识别;    


    console.log('test',/吉{2}/.test('吉吉'));//test false
    console.log('test-2',/吉{2}/u.test('吉吉'));//test-2 true
}

4.s修饰符
在ES6并没有真正实现,只是作为提案;
--点字符在u修饰符下可以识别超过两个字节长度的unicode字符,但是遇到换行符、回车符、行分隔符、段分隔符,这个要加s修饰符(ES6目前没有实现);

相关文章

  • ECMAScript6--4.正则扩展

    1.正则新增特性 构造函数的变化 正则方法的扩展字符串处理的一些正则方法,在ES6中已经是调用了正则对象的方法; ...

  • Linux grep、egrep使用命令详解

    grep egrep区别grep 默认不支持扩展 但可以通过-E 选择来支持扩展正则egrep 支持扩展正则 ...

  • ES6扩展

    字符串的扩展正则的扩展数值的扩展数组的扩展函数的扩展对象的扩展

  • 三剑客_grep

    grep grep 相关参数 grep + 正则表达式(扩展正则)

  • linux正则表达式详解(二) -扩展正则表达式

    上一章我们主要探讨了通配符和基础正则表达式,这章重点探讨扩展正则表达式的应用。 基本正则表达式包含: 扩展正则添加...

  • JavaScript ES6 - 正则表达式扩展

    正则扩展: 主要来与 ES5 做一个对比 (也就是语法的扩展) 1. ES6 正则新特性: 如图所示: 1. 正则...

  • ES6学习 第五章 正则的扩展

    前言 本章介绍正则的扩展。有些不常用的知识了解即可。本章原文链接:正则的扩展[https://es6.ruanyi...

  • 正则扩展

    修饰符i:不区分大小写es5中,有两种写法:1.两个参数 2.一个参数 结果:i y修饰符## y和g的相同点:都...

  • 正则扩展

    正则新特性 构造函数的变化,正则方法的扩展,u修饰符,y修饰符,s修饰符 es5正则的写法 es6新增 y修饰符 ...

  • 正则扩展

    RegExp 构造函数 在 ES5 中,RegExp构造函数的参数有两种情况。 第一种情况是,参数是字符串,这时第...

网友评论

      本文标题:ECMAScript6--4.正则扩展

      本文链接:https://www.haomeiwen.com/subject/jkmsuxtx.html