引用类型——RegExp

120 阅读2分钟

这是我参与11月更文挑战的第20天,活动详情查看:2021最后一次更文挑战

RegExp 类型

ECMAScript通过RegExp类型来支持正则表达式。

正则表达式通用语法使用类似 Perl 的语法:

var expression = / pattern / flags ;

pattern 部分可以时任何简单或者复杂的正则表达式。flags 标志可以带有一个或者多个,用来标明正则表达式的行为。

flags 标志:

  • g:表示全局(global)模式,即模式将被应用与所有字符串,而非在发现第一个匹配项时立即停止;
  • i:表示不区分大小写模式(case-insensitive)模式,即在确定匹配时忽略模式与字符串的大小写;
  • m:表示多行(nultiline)模式,即在到达一行文本末尾时还会继续查找系一行中是否存在与模式匹配的项。
// 匹配所有“ac”的实例
var pattern1 = /ac/g;

// 匹配第一个“bat”或“cat”,不区分大小写
var pattern2 = /[bc]at/i;

// 匹配所有以“at”结尾的3个字符的组合,不区分大小写
var pattern3 = /.at/gi

元字符必须转义,包括 ( [ { \ ^ $ | ) ? * + . ] }

// 匹配第一个“[bc]at”,不区分大小写
var pattern1 = /\[bc\]at/i;
RegExp 实例属性

通过实例属性可以取得有关模式的各种信息,但却没有多大用处,因为这些信息全部都包含在模式声明中。

  • global:表示是否设置了 g 标志;
  • ignoreCase:表示是否设置了 i 标志;
  • lastIndex:表示开始搜索下一个匹配项的字符位置,默认0;
  • multiline:表示是否设置了 m 标志;
  • source:正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符串模式返回;
RegExp 实例方法
  • exec():专门为捕获组而设计的。exec() 接受一个参数,即要应用模式的字符串。
var text = "mom and dad and baby";
var pattern = /mom( and dad( and baby)?)?/gi;

var matches = pattern.exec(text);
  • test():接受一个字符串参数,在模式与该参数匹配时返回 true。
var text = "000-00-0000";
var pattern = /\d{3}-\d{2}-\d{4}/;

if (pattern.test(text)) {
    console.log("The pattern was matched.");
}
模式的局限性

正则表达式不支持的特性:

  • 匹配字符串开始和结尾的 \A\Z 锚;
  • 向后查找;
  • 并集和交集类;
  • 原子组;
  • Unicode 支持;
  • 条件匹配;
  • 命名的捕获组;
  • s 和 x 的匹配模式;
  • 正则表达式注释;