ES6-正则

昨天,复习了正则的基本知识,今天学习ES6新增的正则的知识,做一个总结笔记,大家可以先看4,5对应的方法然后再从头看,话不多说直接上:

1.RegExp构造函数的区别

2.新增的修饰符

3.新增属性

4.字符串对应的正则方法(API文档)

5.RegExp对应的方法(API文档)

直接开始上手:

、

1.RegExp构造函数的区别

 1 //ES5中也有相应的正则构造函数,首先复习一下ES5的RegExp构造函数,创建方法
2 var demo = /abc/g; //字面量
3 var demo = new RegExp('abc','i'); //构造函数创建,第一个为字符串,第二个参数为修饰符
4 var demo = new RegExp(/abc/i); //直接构造函数创建,参数为正则表达式,返回的也是一个正则表达式
5 ​
6 ​
7 //ES6新增区别
8 //我们知道,我们的正则表达式可能修饰符需要经常的更换,想通过一个构造函数,重新更换一个原来的正则表达式的修饰符,ES5不提供简便的操作,但是新增的ES6提供了一个新的方法,就是增多了一个RegExp构造函数的第二个参数(放置修饰字符),可以更改修饰符
9 ​
10 var demo1 = new RegExp('abc', 'i');
11 console.log(demo1); // /abc/i
12 var demo2 = new RegExp(demo1, 'ig');
13 console.log(demo2); // /abc/gi
14 ​

​

2.新增的修饰符

2.1 u修饰符

//u表示Unicode编码字符,大家知道,一般的字符基本都是UTF-8或者UTF-16编码的,基本都是2字节或者1个字节存储,我之前写的字符的表示就说明过这一点,那么超过Unicode编码\uFFFF的时候,那么就需要有两个字节表示,js不能更好的处理,因此,为了解决这一个问题,ES6新增的u修饰符,可以正常处理4个字节的UTF-16编码,总之,处理Unicode编码字符加上u就行了。
​
 1 //(1) . 字符(除了换行外其他所有的单个字符,不包括编码大于\uFFFF)
2 //加上u修饰符,就可以解决 . 字符无法识别编码大于\uFFFF的字符了
3 var s = ''; //之前也是这个例子,理解就好
4 /^.$/.texs(s) //false
5 /^.$/u.texs(s) //true
6 //(2)识别Uncode的时候,ES6新增了大括号的形式,当然加上u修饰符
7 /\u{32}/.test('a'); //false
8 /\u{32}/u.test('a'); //true
9 //(3)i修饰符直接识别大小写,利用Unicode编码识别,需要加上u,这点就不举例子了,涉及到Unicode编码的正则,直接加u
10
 

2.2 y修饰符

 1 //g 为全局匹配,y 也是全局匹配,但是y匹配有“粘性”之称,就是在匹配一次后,接上剩余的从第一位开始匹配,而g则匹配剩下的,只要有匹配成功即可;
2 var s = "aaaa_aaa_aa";
3 var r1 = /a+/g;
4 var r2 = /a+/y;
5 console.log(r1.exec(s)); // aaaa
6 console.log(r2.exec(s)); //aaaa
7 console.log(r1.exec(s)); // aaa
8 console.log(r2.exec(s)); // null 从剩余的 _ 开始,不成功
9 //当然配合着其中的指定匹配更能说明问题,利用lastIndex,当然从指定位置开头就需要有匹配(不再举例子)
10 //y修饰符还有一个作用就是不会忽略非法字符,而g修饰符会忽略非法字符,而且y字符不会有溜掉的字符,具体应用自行查找
11

2.3 s修饰符

1 //介绍s修饰符之前,先说一下‘行终止符’
2 \n,\r
3 // . 不匹配\n \r等行终止符,所以ES6新增了s修饰符,于是有了dotALL模式的说法(所有字符)
4 //如果利用 . 修饰符 想达到dotALL模式的话,需要加上s修饰符
5 //当然,还有dotALL一个属性,返回一个布尔值,表示是否处于dotALL模式下,这点做一个了解
6

3.新增属性

1 //1.sticky 属性
2 //返回布尔值,表示是否使用了y修饰符
3 //2.flags 属性
4 //返回正则表达式修饰符,与之对应的有ES5中的source属性,source 属性返回一个值为当前正则表达式对象的模式文本的字符串,该字符串不会包含正则字面量两边的斜杠以及任何的标志字符
5

4.字符串对应的正则方法

4.1.match()

 1 //1.RegExp.prototype[@@match]()
2 // 对正则表达式匹配字符串时,[@@match]()方法用于获取匹配结果;match 的目标参数是String,match 方法会返回一个数组,它包括整个匹配结果,和通过捕获组匹配到的结果,如果没有匹配到则返回null,还是利用了String.prototype.match()的方法,因此下面几个例子就不介绍RegExp了,直接写String的笔记
3 regexp[Symbol.match](str);
4 ​
5 //使用方法
6 /a/[Symbol.match]('abc');
7 //demo
8 var re = /[0-9]+/g;
9 var str = '2016-01-02';
10 var result = re[Symbol.match](str);
11 console.log(result); // ["2016", "01", "02"]
12 ​
13 ​
14 //2.String.prototype.match()
15 //match() 方法检索返回一个字符串匹配正则表达式的结果。
16 str.match(regexp) //参数为正则表达式
17 //返回值:
18 //有修饰符g的话 , 返回匹配所有结果
19 //没有g,则返回第一个匹配结果
20 ​
21 ​
22 //注意:如果正则表达式不包含 g 标志,str.match() 将返回与 RegExp.exec(). 相同的结果
23

4.2.splite()

 1 //String.prototype.split()
2 //split() 方法使用指定的分隔符字符串将一个String对象分割成子字符串数组,以一个指定的分割字串来决定每个拆分的位置。
3 //在这里可以利用正则表达式,进行拆分然后返回到一个数组
4 var myString = "Hello 1 word. Sentence number 2.";
5 var splits = myString.split(/(\d)/);
6 console.log(splits);
7 //0: "Hello "
8 1: "1"
9 2: " word. Sentence number "
10 3: "2"
11 4: "."
12 length: 5

4.3.search()

1 //String.prototype.search()
2 //search() 方法执行正则表达式和 String 对象之间的一个搜索匹配。
3 //返回值:如果匹配成功,则 search() 返回正则表达式在字符串中首次匹配项的索引;
4 //demo
5 var str = "hey JudE";
6 var re = /[A-Z]/g;
7 var re2 = /[.]/g;
8 console.log(str.search(re)); // returns 4, which is the index of the first capital letter "J"
9 console.log(str.search(re2)); // returns -1 cannot find '.' dot punctuation

4.4.replace()

 1 //String.prototype.replace()
2 //replace() 方法返回一个由替换值(replacement)替换部分或所有的模式(pattern)匹配项后的新字符串。模式可以是一个字符串或者一个正则表达式,替换值可以是一个字符串或者一个每次匹配都要调用的回调函数。如果pattern是字符串,则仅替换第一个匹配项,全局应用的时候,需要加g。
3 str.replace(regexp|substr, newSubStr|function)
4 ​
5 //regexp (pattern)
6 一个RegExp 对象或者其字面量。该正则所匹配的内容会被第二个参数的返回值替换掉。
7 substr (pattern)
8 一个将被 newSubStr 替换的 字符串。其被视为一整个字符串,而不是一个正则表达式。仅第一个匹配项会被替换。
9 newSubStr (replacement)
10 用于替换掉第一个参数在原字符串中的匹配部分的字符串。该字符串中可以内插一些特殊的变量名。参考下面的使用字符串作为参数。
11 function (replacement)
12 一个用来创建新子字符串的函数,该函数的返回值将替换掉第一个参数匹配到的结果。参考下面的指定一个函数作为参数。
13 //返回一个部分或全部匹配由替代模式所取代的新的字符串
14 ​
15 ​
16 //此节重点看正则应用

5.RegExp对应的方法

 1 //1.RegExp.prototype.exec()
2 //exec() 方法在一个指定字符串中执行一个搜索匹配。返回一个结果数组或 null。
3 regexObj.exec(str) //参数需要一个字符串
4 //返回结果数组,但是只返回一个
5 ​
6 //2.RegExp.prototype.test()
7 //test() 方法执行一个检索,用来查看正则表达式与指定的字符串是否匹配。返回 true 或 false。
8 regexObj.test(str) //参数为字符串
9 //返回布尔值,true或者false
10 ​
11 //其他有需要自行搜索
 

​
​

本次内容看书和web文档进行学习和复习,继续加油!!!!

ES6-正则新增(复习+学习)的更多相关文章

  1. ES6—数值(Number,Math对象)(复习+学习)

    ES6-数值(Number,Math对象)(复习+学习) 每天一学,今天要学习ES6的关于数的扩展以及复习,然后通过看书,查阅资料,以及webAPI来搞清楚遇到的,没见过的对象方法等等,下面为本次学习 ...

  2. ES6(正则扩展)

    ES6中正则的扩展 正则新增特性 一.构造函数的变化 1.ES5中new一个正则对象方法 (一行中2个参数,二行中1个参数) (第一行中的第一个参数必须是字符串) 2.ES6中新增一种方法(构造函数) ...

  3. 10.1 ES6 的新增特性以及简单语法

    ES6 的新增特性以及简单语法  let 和 const 模板字符串 箭头函数 对象单体模式 es6面向对象 模块化  let 和 const 之前一直用 var 来声明变量,ES6 新增 let 和 ...

  4. JavaScript ES6 数组新方法 学习随笔

    JavaScript ES6 数组新方法 学习随笔 新建数组 var arr = [1, 2, 2, 3, 4] includes 方法 includes 查找数组有无该参数 有返回true var ...

  5. ES6中新增let命令使用方法

     在ES6中新增了let命令,该命令的用法与var 类似,但是所声明的变量只能在let命令所在的代码块(最接近let 命令的大括号内)中有效果.但是let 又有一些不同于var 的特性. 1.let定 ...

  6. ES6中Map数据结构学习笔记

    很多东西就是要细细的品读然后做点读书笔记,心理才会踏实- Javascript对象本质上就是键值对的集合(Hash结构),但是键只能是字符串,这有一定的限制. 1234 var d = {}var e ...

  7. ES6 第七节 ES6中新增的数组知识(1)

    目录 ES6 第七节 ES6中新增的数组知识(1) 第七节 ES6中新增的数组知识(1) JSON数组格式转换 Array.of()方法: find()实例方法: ES6 第七节 ES6中新增的数组知 ...

  8. ES6 正则的扩展

    1. RegExp构造函数 ES5中,RegExp构造函数的参数: 参数是字符串,这时第二个参数表示正则表达式的修饰符(flag) 参数是一个正则表示式,这时会返回一个原有正则表达式的拷贝.但是,ES ...

  9. ES6之新增set数据结构

    学习set set是ES6中的新增的数据结构,是一种构造函数,类似于数组,但是里面的元素都是唯一的,不重复的. 例如: const set = new Set(); [1,2,3,4,5,2,1,2, ...

随机推荐

  1. Loj#116-[模板]有源汇有上下界最大流

    正题 题目链接:https://loj.ac/p/116 题目大意 \(n\)个点\(m\)条边的一张图,每条边有流量上下限制,求源点到汇点的最大流. 解题思路 先别急着求上面那个,考虑一下怎么求无源 ...

  2. 实时渲染基础(4)纹理(Texture)

    目录 纹理映射(Texture Mapping) 球形贴图(Spherical Map) 立方体贴图(Cube Map) 纹理走样问题 Mipmap 各向异性过滤(Ripmap) 纹理应用技术(Tex ...

  3. 题解 ABC216H Random Robots

    link Solution 考虑一个不合法方案,它一定最后位置的逆序对数不为 \(0\),而且可以发现的是,存在对称方案使得最后逆序对数奇偶性不同,所以我们如果加上 \((-1)\)^{\sigma( ...

  4. Docker 常见命令

    Docker 运行流程 辅助命令 # 1.安装完成辅助命令 docker version -------------------------- 查看docker的信息 docker info ---- ...

  5. 内网渗透DC-1靶场通关(CTF)

    最新博客见我的个人博客地址 DC系列共9个靶场,本次来试玩一下DC-1,共有5个flag,下载地址. 下载下来后是 .ova 格式,建议使用vitualbox进行搭建,vmware可能存在兼容性问题. ...

  6. 【数学】快速傅里叶变换(FFT)

    快速傅里叶变换(FFT) FFT 是之前学的,现在过了比较久的时间,终于打算在回顾的时候系统地整理一篇笔记,有写错的部分请指出来啊 qwq. 卷积 卷积.旋积或褶积(英语:Convolution)是通 ...

  7. javascript-原生-函数

    本节呢讲解js的函数部分,js函数部分总共分为两大类:1.自定义函数.2.系统函数 说白了,系统函数就是js自己内置的函数,其他的都属于自定义函数. 1.自定义函数 函数是完成指定功能的程序段,可以反 ...

  8. SpringCloud微服务实战——搭建企业级开发框架(七):自定义通用响应消息及统一异常处理

      平时开发过程中,无可避免我们需要处理各类异常,所以这里我们在公共模块中自定义统一异常,Spring Boot 提供 @RestControllerAdvice 注解统一异常处理,我们在GitEgg ...

  9. 2020BUAA软工结伴项目作业

    2020BUAA软工结伴项目作业 17373010 杜博玮 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 结伴项目作业 我在这个课程的目标是 学 ...

  10. 编写POC时候的几个参考项目

    0x01. 背景 在编写pocsuite时候,会查阅大量的文件,poc利用方式. ​ 1. pocsuite是什么 Pocsuite 是由知道创宇404实验室打造的一款开源的远程漏洞测试框架.它是知道 ...