ES6标准入门之正则表达式的拓展

  所谓正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。在之前使用基于Jquery库开发项目的时候,用的正则表达式最多的就是一些输入框的检验,比如检验电话号码或者邮箱的格式是否合适等。

  在ES5中,RegExp构造函数的参数有两种情况:

  一、参数是字符串,这是第二个参数标识正则表达式的修饰符(flag)。

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

  //  等价于 var regex = /xyz/i;

  二、参数是一个正则表达式,这时会返回一个原有正则表达式的拷贝。

  var regex = new RegExp( /xyz/i) ;

  //  等价于 var regex = /xyz/i;

  但是ES5不允许此时使用第二个参数添加修饰符,即第一种方式,否则就会报错。ES6改变了这种行为,如果RegExp构造函数第一个参数是正则表达式,那么可以使用第二个参数指定修饰符。而且,返回的正则表达式会忽略原有正则表达式的修饰符,只有重新指定。下面为大家介绍一下ES6对正则表达式新增的各种修饰符:

  1、u修饰符

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

  2、y修饰符

  y修饰符又叫粘连,与g修饰符类似,都是从上一次匹配成功的下一个位置开始,只不过y修饰符会确保匹配必须从剩余的第一个位置开始。

  3、s修饰符

  s修饰符就是doAll模式,字符串中所有的字符都匹配,包括换行符(\n)、回车符(\r)等。

  介绍完各种修饰符之后,为大家重点介绍具名组匹配,简而言之就是正则表达式使用圆括号进行组匹配,先看下面一段代码

  

  

1 const RE_DATA = /(\d{4})-(\d{2})-(\d{2})/;
2 const maset = RE_DATA.exec(‘1999-12-31‘);
3 console.log(maset[1]);
4 console.log(maset[2]);
5 console.log(maset[3]);
6
7 //     1999
8 //     12
9 //     31

组匹配

  看完这段代码是不是觉得之前自己处理时间的时候白白写了很多代码,反正我是这样觉得的,我一直都是对后台传给我的时间字段进行split分隔,显得很low,有了组匹配是不是高大上了很多,嘿嘿。

  所谓具名组匹配就是在圆括号内部,在模式的头部添加“问号 + 尖括号 + 组名”,然后在exec方法中返回结果的groups属性上引用该组名,看下面代码

  

 1 const RE_DATA_REG = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/;
 2
 3 const maset_re = RE_DATA_REG.exec(‘1999-12-31‘);
 4
 5 console.log(maset_re.groups.year);
 6 console.log(maset_re.groups.year);
 7 console.log(maset_re.groups.year);
 8
 9
10 //       1999
11 //       12
12 //       31

原文地址:https://www.cnblogs.com/hexiaobao/p/10192459.html

时间: 2024-10-09 20:50:48

ES6标准入门之正则表达式的拓展的相关文章

ES6标准入门 论文随笔(二)

一.基本信息 标题:ES6标准入门 时间:2015 来源:电子工业出版社 关键词:ES6标准入门 二.研究内容 问题定义: ES6是什么?它是用来干嘛的?为什么要用ES6? 特点:(1)JavaScript新特性 (2)let.const (3)promise (4)iterator (5)proxy 三.结论 <ES6标准入门(第2版)>为中级难度,适合对 JavaScript 语言或 ES5 已经有所了解的读者,用来提高水平,了解这门语言的最新发展:也可当作参考手册,查寻 ES6/ES7

《ES6标准入门》29~48Page 字符串拓展 正则拓展

1.字符串的拓展 ES3允许使用类似\u0061这样的形式来表示字符,其中的数字是Unicode-8编码. 但如果超出\uffff的字符,必须使用双字节的形式表达,例如 \uD842\uDFB7. 在ES6中,可以用\u{20BB7}这种形式表示,其中数字是Unicode-16编码. 对于需要Unicode-16编码存储的字符,ES认为有2个字符.此时使用String.codePoinAt()方法,可以准确的识别字符串中的字符,如果需要遍历,则需要使用for...of循环. 与此相对,Strin

ES6标准入门(阮一峰)-阅读记录与心得

目标:学习ES6标准,并能灵活使用ES6标准的JavaScript 内容:(未完成,待继续) 第一阶段:准备阶段 1.第一章,入门准备.主要讲了ES6简介与ECMAScript历史(这部分快速阅读),重点掌握ES6环境具体部署,建议使用Babel转码器.在配置Babel转码器之前,需要下载安装node环境,可以适当理解包管理的概念. 第二阶段:基础:新特性 1.第二章, 原文地址:https://www.cnblogs.com/xinkuiwu/p/11551679.html

《ES6标准入门》49~68Page 数值的拓展 数组的拓展

1.数值拓展 ES6提供的二进制和八进制表示法分别是二进制: 0B111110111(0b111110111) 八进制: 0O767(0o767) ES6提供了新的Number.isFinite()和Number.isNaN()方法来判断参数是否为无穷或者非数字. 新方法和全局方法的区别在于,新方法不再将参数转换为数值,而直接判断. ES6将parseInt()和parseFloat()方法移植到了Number对象上,用途保持不变. Number.isInteger()方法判断是否为整数. ES

【学习笔记】ES6标准入门

这里简要记录一下对自己感触比较深的几个知识点,将核心的应用投放于实际的项目之中,提供代码的可维护性. 一.let和const { // let声明的变量只在let命令所在的代码块内有效 let a = 1; var b = 2; } console.log(a); // 报错: ReferenceError: a is not defined console.log(b); // for循环的技术器就很适合let命令 for (let i = 0; i < 3; i++) { console.l

[转] 《ES6标准入门》读书笔记

来源:https://segmentfault.com/a/1190000005863641 let和const命令 ES6新增let命令,用于声明变量,是块级作用域. let声明的变量不会像var声明的变量发生“变量提升”现象,所以,变量一定要在声明后使用,不然就会报错. 暂时性死区:只要块级作用域内存在let命令,它所声明的变量就会“绑定”在这个区域,不再受外部的影响.即在代码块内,使用let命令声明变量之前,这个变量都是不可用的,这在语法上称为“暂时性死区”. ES6规定暂时性死区和不存在

ES6标准入门 第一章:简介

ECMAScript 6 是JavaScript 语言的下一代标准:发布于2015年,又称为ECMAScript 2015. ECMAScript 方言还有 JScript 和 ActionScript. ECMAScript 与 JavaScript 的关系:前者是后者的规范,后者是前者的一种实现. 一个完整的JavaScript实现 包含 ECMAScript .DOM. BOM 三部分. babel 转码器: Babel 是一个广为使用的ES6转码器,可以将ES6代码转为ES5代码,从而在

《ES6标准入门》10~28Page let和const命令 变量的解构赋值

1.let和const命令 (1)let命令 let命令类似于ES3中的var命令,但是所声明的变量只在let所在的代码块内有效. 1 { 2 let a = 10; 3 var b = 1; 4 } 5 6 console.log(a); //报错 7 console.log(b); //1 let相较var来讲有三个特殊性质,分别是不存在变量提升.暂时性死区和不允许重复声明. 1 //不存在变量提升 2 console.log(a); //报错 3 let a = 1; 4 5 //你无法在

ES6 标准入门

1.let所声明的变量只在let命令所在的代码块有效 2.不存在变量提升 在代码块内,使用let命令声明变量之前,该变量都是不可用的,称为暂时性死区. 3.不允许重复声明 let 不允许在相同作用域内重复声明一个变量 4.块级作用域 没有块级作用域的不合理的场景 ar temp = new Date(); function f() { console.log(temp); if(true)// true或false结果一样 { var temp = "hello" } } f() //