Javascript 高级编程 5章103页 【RegExp类型】

76 阅读2分钟

RegExp类型

支持 正则表达式

var expression = / pattern / flags ;

pattern: 任何 简单或复杂的 正则表达式

  • 字符类
  • 限定符
  • 分组
  • 向前查找
  • 反向引用

所有 元字符 都必须转义。元字符 一般都有 一种或多种 用途

//元字符有:
 ( [ { \ ^ $ | ) ? * + . ] }

flags: 标明 正则表达式行为

  • g: (global) 应用于所有字符串。而非 发现第一个匹配项时停止
  • i: (case-insensitive) 不区分大小写
  • m: (multiline) 达到一行文本末尾时 继续查找下一行 是否存在匹配项

示例: 以字面量的形式 定义 正则表达式

// 所有有"at"的字符串
var pattern1 = /at/g;
// 第一个有"bat"或"cat"的字符串, 不区分大小写
//var pattern1 = /[bc]at/i;   元字符需要转义
var pattern1 = /\[bc\]at/i;
// 所有 三个字符 并 以 "at"结尾 的字符串, 不区分大小写
//var pattern1 = /.at/gi;   元字符需要转义
var pattern1 = /\.at/gi;

RepExp 构造函数

接收两个参数:

  • 要匹配的 字符串 模式
  • 可以选择的 标志 字符串

以字面量定义的 任何正则表达式,都可以用构造函数来定义

// 第一个有"bat"或"cat"的字符串, 不区分大小写
//var pattern1 = /[bc]at/i;   元字符需要转义
var pattern1 = /\[bc\]at/i;

var pattern2 = new RegExp("[bc]at", "i");

构造函数接收的参数 都是 字符串

某些情况下 需要进行 双重转义

  • 元字符 需要转义
  • 元字符转义完毕后,如果还有\, 那么也需要转义为\\

字面量 定义的正在表达式,始终共享 同一个实例

构造函数 定义的正则表达式,每一次都是 一个新实例

var re = null, i;
for(i = 0; i < 10; i++)
{
    re = /cat/g;   //实例属性不会重置
    //第二次调用test()方法时,会失败,会找不到cat,会返回false
    //第二次调用test()方法时,会从索引3(上次匹配的末尾)开始匹配
    re.test("catastrophe");
}

for(i = 0; i < 10; i++)
{
    re = new RegExp("cat", "g");
    //每次调用test()方法,都会返回true
    re.test("catastrophe");
}