在 ES5 中

RegExp 构造函数的参数有两种情况

  • RegExp(字符串, 正则表达式的修饰符)
  • RegExp(正则表达式);
  • var regex = new RegExp('xyz', 'i');
    
    // 等价于
    var regex = new RegExp(/xyz/i); // 不能再有 第二参数修饰符,否则会报错 // 等价于
    var regex = /xyz/i;
  • lastIndex 属性 指定每次搜索的开始位置,修饰符从这个位置开始向后搜索,直到发现匹配为止
  • const REGEX = /a/g;
    
    REGEX.lastIndex = 2;    // 指定从2号位置(y)开始匹配
    const match = REGEX.exec('xaya'); // 匹配成功
    match.index; // 3 // 在3号位置匹配成功 REGEX.lastIndex; // 4 // 下一次匹配从4号位开始
    REGEX.exec('xaya'); // null // 4号位开始匹配失败

在 ES6 中

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

而且,返回的正则表达式会忽略原有的正则表达式的修饰符,只使用新指定的修饰符

  • new RegExp(/abc/ig, 'i').flags    // "i"   而不是 'ig'
  • 字符串的正则方法

字符串对象共有 4 个方法,可以使用正则表达式:match()replace()search()split()

ES6 将这 4 个方法,在语言内部全部调用 RegExp 的实例方法,从而做到所有与正则相关的方法,全都定义在 RegExp 对象上

  • String.prototype.match    调用    RegExp.prototype[Symbol.match]
    String.prototype.replace 调用 RegExp.prototype[Symbol.replace]
    String.prototype.search 调用 RegExp.prototype[Symbol.search]
    String.prototype.split 调用 RegExp.prototype[Symbol.split]
  • 添加了 修饰符,含义为“Unicode 模式”,

用来正确处理大于 \uFFFF 的 Unicode 字符。

也就是说,会正确处理四个字节的 UTF-16 编码

  • /^\uD83D/u.test('\uD83D\uDC2A');    // false
    /^\uD83D/.test('\uD83D\uDC2A'); // true
  • 必须加 u 修饰符 的情况
  • ES6 新增了使用大括号表示 Unicode 字符,这种表示法在正则表达式中必须加上u修饰符,才能识别当中的大括号,否则会被解读为量词
  • /\u{61}/.test('a');    // false
    /\u{61}/u.test('a'); // true
    /\u{20BB7}/u.test('

    ECMA Script 6_RegExp 正则表达式的更多相关文章

    1. ECMA Script 6_简单介绍

      ECMAScript 6 ECMA 组织 前身是 欧洲计算机制造商协会 指定和发布脚本语言规范,标准在每年的 6 月份正式发布一次,作为当年的正式版本 这样一来,就不需要以前的版本号了,只要用年份标记 ...

    2. ECMA Script 6_模块加载方案 ES6 Module 模块语法_import_export

      1. 模块加载方案 commonJS 背景: 历史上,JavaScript 一直没有模块(module)体系, 无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来. 其他语言都有这项功能: ...

    3. ECMA script 6的新特性

      简单介绍下ES6的新特性: (1)箭头操作符 :简化了函数的书写 (2)类的支持:引入了class关键字,对象的创建,继承更加直观,父类方法的调用,实例化,构造函数等概念更加形象化. (3)增强的对象 ...

    4. ECMA Script 6_数值的扩展

      1. 二进制 和 八进制 新的表示法 前缀 0b(或0B) 表示 二进制 前缀 0o(或 0O )表示 八进制 console.log(0b111110111 === 503); // true co ...

    5. ECMA Script 6_数组的扩展_扩展运算符

      1. 扩展运算符 内部调用的是数据结构的 Iterator 接口, 因此只要具有 Iterator 接口的对象,都可以使用扩展运算符 ... 如 map,,,, [...arr] 扩展运算符(spre ...

    6. ECMA Script 6_异步编程之 Promise

      Promise 对象 异步编程 方案,已同步的方式表达异步的代码,解决回调地狱的问题 比传统的解决方案——回调函数和事件——更合理和更强大 是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步 ...

    7. ECMA Script 6_必须要知道的基础

      ES6 为了保持兼容性,var 命令和 function 命令声明的全局变量,依旧是顶层对象的属性: 另一方面规定,let 命令.const 命令.class 命令声明的全局变量,不属于 window ...

    8. ECMA Script 6_解构赋值_模式匹配

      解构赋值 从数组中提取值,按照对应位置,对变量赋值 只要等号右边的值不是对象或数组,就先将其转为对象. 由于 undefined 和 null 无法转为对象,所以对它们进行解构赋值,都会报错 let ...

    9. ECMA Script 6_字符串_扩展_字符 是4字节还是2字节?_模板字符串

      ES6 字符串扩展 ES6 加强了对 Unicode 的支持,并且扩展了字符串对象 字符 的 Unicode 表示法 允许采用 \uxxxx 形式表示一个字符, 其中 xxxx 表示字符的 Unico ...

    随机推荐

    1. 第二节:深入剖析Thread的五大方法、数据槽、内存栅栏。

      一. Thread及其五大方法 Thread是.Net最早的多线程处理方式,它出现在.Net1.0时代,虽然现在已逐渐被微软所抛弃,微软强烈推荐使用Task(后面章节介绍),但从多线程完整性的角度上来 ...

    2. 第四节:Task的启动的四种方式以及Task、TaskFactory的线程等待和线程延续的解决方案

      一. 背景 揭秘: 在前面的章节介绍过,Task出现之前,微软的多线程处理方式有:Thread→ThreadPool→委托的异步调用,虽然也可以基本业务需要的多线程场景,但它们在多个线程的等待处理方面 ...

    3. 第九节:基于MVC5+AutoFac+EF+Log4Net的基础结构搭建

      一. 前言 从本节开始,将陆续的介绍几种框架搭建组合形式,分析每种搭建形式的优势和弊端,剖析搭建过程中涉及到的一些思想和技巧. (一). 技术选型 1. DotNet框架:4.6 2. 数据库访问:E ...

    4. 使用js代码将html导出为Excel

      js代码将html导出为Excel的方法: 直接上源码: <script type="text/javascript" language="javascript&q ...

    5. 在Windows上安装Arduino-IDE

      Arduino IDE的官方下载地址为:http://arduino.cc/en/Main/Software 也可以从我的网盘下载:win系统 1.8.9版本 链接:https://pan.baidu ...

    6. 使用fetch调用node.js的Resuful服务

      在目前的软件架构中,慢慢又有这样的趋势,就是在前端和业务接口层中间再加入一层,这是由于nodejs相对JAVA而言不适合做复杂的业务逻辑,如下图: 在这样的结构中,JS前端和web层都是前端开发工程师 ...

    7. sed 正则 ! 取反

      !符号表示取反,x,y!表示匹配不在x和y行号范围内的行,利用sed命令用于的阿银不在2-7之间的行 [111 sed]$ cat input [111 sed]$ sed -n '2,7!p' in ...

    8. 【原创】大叔经验分享(12)如何程序化kill提交到spark thrift上的sql

      spark 2.1.1 hive正在执行中的sql可以很容易的中止,因为可以从console输出中拿到当前在yarn上的application id,然后就可以kill任务, WARNING: Hiv ...

    9. 图形验证码 tesserocr pillow

      利用tesserocr和pil生成图形验证码 import tesserocr from PIL import Image image = Image.open('222.jpg') image = ...

    10. RDay2-Problem 1 A

      题目描述 初始给你一个排列p[i],你可以执行以下操作任意多次. 选择一个i,交换p[i]和p[i+1]的值(其实就是交换排列当中两个相邻的元素). 我们现在希望对于任意的i满足p[i]不等于i,求最 ...