RegExp

作者: zdxhxh | 来源:发表于2020-01-16 10:25 被阅读0次

    RegEep

    在ES5中,正则的构造函数如果第一个参数为正则时,第二个参数添加修饰符会报错

    new RegExp(/aaa/,'i') // Uncaught TypeError:
    

    ES6却可以

    字符串的正则方法

    字符串的正则方法

    • match
    • replace
    • search
    • split

    ES6将这4个方法全部调用在RegExp的实例上,也就是它内部是使用RegExp对象处理的.

    RegExp.prototype.unicode

    正则实例加了unicode属性,表示是否设置了u修饰符

    const es6 = /hello/u;
    es.unicode  // true 
    

    RegExp.prototype.sticky

    正则实例加了sticky属性,表示是否设置了y修饰符

    const es6 = /hello/y;
    es.sticky  // true 
    

    RegExp.prototype.flags

    正则实例加了flags属性,可以返回正则的修饰符

    const reg = /666/gi 
    reg.flags // 'gi'
    

    u修饰符

    ES6 对正则表达式添加了u修饰符,含义为“Unicode 模式”,用来正确处理大于\uFFFF的 Unicode 字符。也就是说,会正确处理四个字节的 UTF-16 编码。(不懂)

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

    拥有以下几点变化都是围绕对于码点0XFFFF的Unicode字符 :

    • .修饰符 : .含义是除了换行符以外的任意单个字符,对于码点0XFFFF的Unicode字符,点字符不能识别,必须配合u修饰符
    • Unicode字符表示法 : /\u{xxxx}/u 可以使用{}表示Unicode字符,这种表示法必须加上u修饰符才能识别大括号,否则会被解释成强化元字符(量词)
    • 其他元字符(强化),如量词 : {0,2} 本来这个元字符是不处理这个对于码点0XFFFF的Unicode字符,但加上u修饰符后,就处理了,其他元字符同理。(就是说原本一些元字符是不包括这个码点0XFFF的Unicode字符的)

    y 修饰符

    y修饰符表示粘连的意思,看代码

    const reg = /aa/y
    const str = 'baaaa_aa'
    console.log(reg.exec(str))    // none 
    

    它要求必须从第一个字符开始匹配 (类似 ^ )

    const reg = /aa/y
    const str = 'aabb_aa'
    console.log(reg.exec(str))
    

    这个修饰符设计的初衷,好像是这样的,就是说能够在g(全局匹配下的^有效)

    const str = 'aaaba'
    // 我希望将b前面的a全部死亡
    const reg = /a/gy
    console.log(str.replace(reg,'死亡'))    // logs 死亡死亡死亡ba
    const errorReg = /^a/g
    console.log(str.replace(errorReg,'死亡'))  // 死亡aaba
    

    s修饰符 doAll模式

    .是一个元字符,代表任意单个字符,但是有两个例外

    • 四个字节的UTF-16字符,这个可以用u修饰符解决
    • 行终止符

    所谓的行终止符,就是该字符表示一行的终结,如

    • U+000A 换行符(\n)
    • U+000D 回车符(\r)
    • U+2028 行分隔符(line separator)
    • U+2029 段分隔符(paragraph separator)
    /foo./.test('foo\n')  // false 
    

    .不匹配\n,所以正则表达式返回false

    /foo./s.test('foo\n')  // true 
    

    这种称为doAll模式

    相关文章

      网友评论

          本文标题:RegExp

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