美文网首页
3-3 正则扩展

3-3 正则扩展

作者: 留白_汉服vs插画 | 来源:发表于2018-01-26 15:18 被阅读17次

和ES5的对比,以下方面

构造函数的变化 正则方法的扩展(ES6中调用了正则对象的方法) u修饰符 y修饰符 s修饰符

i,g也是修饰符。ES6中增加了u,y。s是体验,还没有增加好。

构造函数:

ES5中,new一个对象的话,两种方式:

{ let regex = new RegExp('xyz','i'); let regex = RegExp(/xyz/i) 

console.log( regex.test('xyz123'),regex.test('xyz123'));}  两个参数和一个参数的方式。

ES5中,第二中正则只能是接受一个参数,但是,在ES6中,第二种方式,同样也可以接受第二个参数: let regex3 = RegExp(/xyz/ig ,'i' ) ; 这时候,第二个参数i,会覆盖ig。console.log(regex3.flags);// i  这里flags是ES6中新增的,用来获取正则对象修饰符的属性。

修饰符:

重点讲u/y修饰符

{ let s = 'bbb_bb_b' ; let a1 = /b+/g ; let a2 = /b+/y ;

console.log("one ", a1.exec(s) , a2.exec(s) ); 

console.log("two ", a1.exec(s) , a2.exec(s) ); }

第一次匹配,g,y都可以匹配到bbb,第二次匹配的时候,s剩下的_bb_b,在u匹配时候,能匹配成功就可以,不管从哪个位置开始,而y匹配的时候,必须从_下划线匹配,匹配成功则返回

判断是否有y,使用sticky,比如console.log(a1.sticky)

u 就是Unicode的缩写,在字符处理Unicode的一个特征值。

ES6对正则表达式添加了u修饰符,含义为“Unicode模式”,用来正确处理大于\uFFFF的Unicode字符。也就是说,会正确处理四个字节的UTF-16编码。对于码点大于0xFFFF的Unicode字符,点字符不能识别,必须加上u修饰符。ES6新增了使用大括号表示Unicode字符,这种表示法在正则表达式中必须加上u修饰符,才能识别。

/\u{61}/.test('a')// false/\u{61}/u.test('a')// true/\u{20BB7}/u.test('𠮷')// true

(1)RegExp构造函数

  ES5中,RegExp构造函数有两种:第一种参数是字符串,这时第二个参数表示

  正则表达式的修饰符(flag)。

    var regex = new RegExp('xyz', 'i');

    // 等价于

    var regex = /xyz/i;

  第二种参数是一个正则表示式,这时会返回一个原有正则表达式的拷贝:

    var regex = new RegExp(/xyz/i); // 等价于 var regex = /xyz/i;

  但不允许此时用第二个参数;

  ES6规定,第一个参数是正则对象,也可以用第二个加修饰符,并且会掩

  盖原来的修饰符:

    new RegExp(/abc/ig, 'i').flags //i

    flags就是修饰符,i代表不区分大小写

(2)字符串的正则方法

  字符串对象共有4个方法,可以使用正则表达式:

    match()、replace()、search()、split()

  ES6将这4个方法,全部定义在RegExp对象上。

(3)u修饰符

  ES6对正则表达式添加了u修饰符,含义为“Unicode模式”,用来正

  确处理大于\uFFFF的Unicode字符:

    /^\uD83D/u.test('\uD83D\uDC2A') // false

    /^\uD83D/.test('\uD83D\uDC2A') // true

    \uD83D\uDC2A是一个字符,加u之后可以识别。

用u字符,同时带来一下问题

    ' . '字符代表所有字符,码点大于0xFFFF的,必须用u修饰符;

    Unicode用大括号表示,必须用u才能被识别;

    使用u修饰符,两次才会识别大于0x的Uni字符;

      /吉{2}/.test('吉吉') // false

      /吉{2}/u.test('吉吉') // true

    u字符更加严格,可以识别不规范的字符。

(4)y修饰符

  ES6新增y修饰符,叫做粘连修饰符,y修饰符与g修饰符相同,都是全局

  匹配,只不过y是紧跟下一个位置开始,g是后面存在即可:

    var s = 'aaa_aa_a';

    var r1 = /a+/g;

    var r2 = /a+/y;

    r1.exec(s) // ["aaa"]

    r2.exec(s) // ["aaa"]

    r1.exec(s) // ["aa"]

    r2.exec(s) // null

  由于使用y修饰符,返回null;

(5)sticky属性

  ES6新增sticky属性,来判断是否存在y修饰符:

    var r = /hello\d/y; r.sticky // true

(6)flags属性

  新增flags属性,返回正则表达式的修饰符;

  ES5的source返回正则表达式的正文:

    /abc/ig.source //abc

    /abc/ig.flags //ig

(7)s 修饰符:dotAll 模式

  ES5中,' . '代表一切单字符 ,但是以下除外:

  换行符(\n) 回车符(\r)

  ES6新增s修饰符,即dotAll 模式, . 表示任何字符

    /foo.bar/.test('foo\nbar') //false

    /foo.bar/s.test('foo\nbar') // true

  同时增加dotAll属性,返回是否处于dotAll 模式:

    const re = /foo.bar/s;

    re.dotAll // true

  /s修饰符和多行修饰符/m不冲突,两者一起使用的情况下,.匹配所有字符,

  而^和$匹配每一行的行首和行尾。

相关文章

  • 3-3 正则扩展

    和ES5的对比,以下方面 构造函数的变化 正则方法的扩展(ES6中调用了正则对象的方法) u修饰符 y修饰符 s修...

  • 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构造函数的参数有两种情况。 第一种情况是,参数是字符串,这时第...

网友评论

      本文标题:3-3 正则扩展

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