美文网首页
ES项目学习笔记(四)正则的扩展

ES项目学习笔记(四)正则的扩展

作者: 托尼陈 | 来源:发表于2020-01-05 18:18 被阅读0次

RegExp构造函数

写正则时基本上都是直接以//定义了,不看还差点忘了有个构造函数RegExp,这个构造参数有两种用法,一种是直接传入正则表达式,一种是传入两个字符串参数的,es6中扩展多了一种传参情况。

{
    //es5之前3种相同的定义一个正则的方式
    let regex_old = /xyz/i;
    let regex_old1 = new RegExp(/xyz/i);    
    let regex_old2 = new RegExp('xyz','i');

    //es6 在传入一个正则表达式还可以传入一个参数表示修饰符,会覆盖正则表达式中的修饰符
    let regex_new = new RegExp(/xyz/ig,'i');
    console.log(new RegExp(/xyz/ig).flags); //gi
    console.log(new RegExp(/xyz/ig,'i').flags); //i
}

u 修饰符

扩展该修饰符主要是用来正确处理大于\uFFFF的 Unicode 字符。用以更正以下正则表达式的行为:

  • 点字符

点(.)字符不能识别码点大于0xFFFF的Unicode字符,必须加上u修饰符。

let s = '𠮷';
点(.)字符在正则表达式中,含义是除了换行符以外的任意单个字符
{
    console.log('大于0xFFFF的Unicode字符',/^.$/.test(s)); // false
    console.log('使用u字符',/^.$/u.test(s)); // true
}
  • Unicode 字符表示

es6使用{}表示一個 Unicode 字符,如果在正则中使用必须要加上u修饰符,否则会被解读为量词
{
console.log(/\u{61}/.test('a')); // false
console.log(/\u{61}/u.test('a')); // true
console.log(/\u{20BB7}/u.test('𠮷')); // 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
}
  • 预定义模式

\S匹配所有非空白字符。

{
    /^\S$/.test('𠮷') // false
    /^\S$/u.test('𠮷') // true
}
  • i 修饰符

\u004B与\u212A都是大写的K。不加u修饰符,就无法识别非规范的K字符。

/[a-z]/i.test('\u212A') // false
/[a-z]/iu.test('\u212A') // true
  • 转义

没有u修饰符的情况下,正则中没有定义的转义(如逗号的转义,)无效,而在u模式会报错。

/\,/ // /\,/
/\,/u // 报错

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); //表示是否开启了粘连模式

在看这一部分内容时发现对正则的掌握程度真的很差,导致很多内容都都是新的,待后面对正则再进行系统的学习后,再补充。先记录到此。

相关文章

  • ES项目学习笔记(四)正则的扩展

    RegExp构造函数 写正则时基本上都是直接以//定义了,不看还差点忘了有个构造函数RegExp,这个构造参数有两...

  • ES6学习笔记四|正则的扩展

    1. RegExp构造函数 ES5中,构造函数的参数有两种。 第一种,参数是字符串,第二个参数表示正则表达式的修饰...

  • JavaScript ES6 - 正则表达式扩展

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

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

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

  • ES6扩展归纳

    ES6扩展归纳 介绍ES6相比与ES5在原有对象上的扩展,包括字符串、正则、数值、函数、数组、对象等扩展,本文是阮...

  • es6学习笔记之正则扩展

    RegExp 构造函数 Tips:如果RegExp构造函数第一个参数是一个正则对象,那么可以使用第二个参数指定修饰...

  • ES6 学习笔记(4) 正则的扩展

    1. RegExp 构造函数 ES5中RegExp构造函数的参数有两种情况 参数是字符串,这时候第二个参数表示正则...

  • 正则扩展

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

  • es6学习笔记整理(二)正则扩展

    正则新特性 在正式开始之前,简单地了解一下ES5的修饰符:这些符号被称为正则表达式模式修饰符,用法含义如下: 1、...

  • JS正则表达式

    JS正则表达式一条龙讲解,从原理和语法到JS正则、ES6正则扩展,最后再到正则实践思路 Stinson 关注 20...

网友评论

      本文标题:ES项目学习笔记(四)正则的扩展

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