愿你坚持不懈,努力进步,进阶成自己理想的人

—— 2017.09, 写给3年后的自己

《Javascript高级程序设计》读书笔记——RegExp类型

在JS中,主要通过RegExp来支持正则表达式

一、正则的创建

可以使用以下的语法来创建正则:

let pattern = /pattern/flags

其中,pattern表示正则表达式,flags表示标志(用来表明正则的行为),它的取值有:

  • g 表示全局匹配(在发现第一个匹配项时还继续向下匹配)
  • i 表示匹配的时候忽略大小写
  • m 表示多行匹配模式(即使达到文本的末尾时,还会继续向下查找下一行是否能继续匹配)

除了使用字面量创建正则表达式外,还可以使用构造函数的形式,如:

let pattern = new RegExp("Pattern", "Flags");

注意点:
1、PatternFlags都是字符串
2、所以元字符都必须进行双重转义,例子如下):

  • /\[bc\]at/ -> "\\[bc\\]at"
  • /\.at/ -> "\\.at"

在ES3中,字面量创建的RegExp对象是共享的,构造函数创建的对象则是新实例。而在ES5中,明确规定行为应该一致:即都是新实例


二、RegExp实例属性

RegExp具有如下的实例属性:

  • pattern.global (Boolean) 表示是否设置了g标志
  • pattern.ignoreCase (Boolean) 表示是否设置了i标志
  • pattern.lastIndex 表示开始搜索下一个匹配项的字符位置(从0开始)
  • pattern.multiline (Boolean) 是否设置了m标志
  • pattern.source 得到正则表达式的字符串表示(无论是字面量还是构造函数创造的,均返回字面量格式的字符串),用toString()也可以得到类似效果
  • pattern.valueOf() 得到实例本身


三、RegExp实例方法

RegExp主要有:

  • exec() 方法,执行匹配并获得捕获组,返回值是一个数组,但是这个数组还有index(表示匹配项在字符串中的位置)和input(表示应用正则表达式的字符串)两个属性,然后数组的第0项表示与整个模式匹配的串,第1项起则是与各个捕获组匹配的字符串
  • test() 方法,测试传入的字符串是否通过匹配,但不进行保存


四、RegExp的静态属性

  • RegExp.input 最近一次匹配到的字符串(短属性名为:$_
  • RegExp.lastMatch 最近一次的匹配项(短属性名为:$&
  • RegExp.lastParen 最近一次的捕获组(短属性名为:$+
  • RegExp.leftContextinput中的lastMatch之前的文本(短属性名为:`$``)
  • RegExp.rightContextinput中的lastMatch之后的文本(短属性名为:$'
  • RegExp.$1 ~ RegExp.$9 获取存储的9个捕获组