• ES6扩展——正则扩展(u、y修饰符)


    //下面三行代码效果一样
    //全局匹配开头为a的
    const regexp1 = /^a/g;
    
    const regexp2 = new RegExp('a','g');
    const regexp3 = new RegExp(/^a/);
    const regexp4 = new RegExp(/a/);
    
    console.log('aabbcc'.match(regexp1)); //['a']
    console.log('bbaacc'.match(regexp1)); //null
    console.log('baa'.match(regexp3)); //['a','a']
    console.log('baa'.match(regexp4)); //['a']
    
    //es6下正则变化
    //1.构造函数的变化:写了修饰符,第二个参数再写修饰符的话也不会报错.而且第二个参数的修饰符会覆盖前面的
    //regex.flags返回修饰符
    const regexp5 = new RegExp(/a/giuy,'ig'); //regexp5.flags返回ig
    
    //es6下新增的修饰符
    //1.u代表unicode,可以用它识别大于两个字节的unicode的字符
    //想要把后面两个码点识别成一个字符
    console.log(/^ud83d/u.test('ud83dudc36')); //false
    
    //y 粘连修饰符 sticky
    //g和y会把整个字符串中满足的条件都给匹配到
    //不同之处在于y要保证从上一个匹配结果的索引开始就满足匹配条件,这样才会进行下一次的匹配,否则就匹配结束.
    const r1 = /imooc/g;
    const r2 = /imooc/y;
    
    const str = 'imoocimooc-imooc';
    
    console.log(r1.exec(str));
    console.log(r1.exec(str));
    console.log(r1.exec(str));
    console.log(r1.exec(str));
    u指Unicode的意思
    console.log(/^ud83d/.test('ud83dudc36'))
    这里的ud83dudc36会被当做2个字符,所以返回的是true;
    console.log(/^ud83d/u.test('ud83dudc36'))
    加了u修饰符,ud83dudc36会被当做1个字符,所以返回的是false
    
    
    y指粘连修饰符 sticky
    如图:---
    修饰符y 和修饰符g相似点:
    都是不会只匹配一个就结束,都是尽可能的去匹配
    不同点:
    y要保证从上一个匹配的索引开始就满足条件,才进行下一个匹配,否则匹配结束;
    g没有这个要求,只要有满足要求的字符串,都会进行匹配
    g--表示全局匹配 global
    i--忽略大小写
    u--unicode识别字符
    y--粘连修饰符
     
    match是正则中的方法,可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。
    
    语法:stringObject.match(regexp)
    
    stringObject是字符串,regexp是正则


    test() 方法用于检测一个字符串是否匹配某个模式。返回值是true或者false;
    exec() 方法用于检索字符串中的正则表达式的匹配;
    match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。
     
  • 相关阅读:
    理解MVC MVVM MVP设计模式
    跨域问题详解
    JWT认证
    Django缓存
    API文档自动生成
    DRF分页器
    DRF请求和响应,以及Response对象重新封装
    drf认证、权限、频率、过滤、排序、异常处理
    drf之视图组件以及自动化路由
    【python面向对象实战练习】植物大战僵尸
  • 原文地址:https://www.cnblogs.com/rickdiculous/p/13122527.html
Copyright © 2020-2023  润新知