RegExp 类型
- ECMAScript 通过 regExp 类型来支持正则表达式
- 每个正则表达式都可带有一或多个标志(flags)
- g:表示全局模式(global),即模式将被应用于所有字符串,而非在发现第一个匹配项时立即停止
- i: 表示不区分大小写(case-insensitive)模式,即在确定匹配项时忽略模式与字符串的大小写
- m 表示多行模式(multiline),即在到达一行文本末尾时还会继续查找下一行中是否存在于模式匹配的项
// 匹配字符串中所有“at”的实例
var pattern1 = /at/g;
// 匹配第一个 "bat" 或 "cat",不区分大小写
var pattern2 = /[bc]at/i;
// 匹配所有以 "at" 结尾的 3 个字符的组合,不区分大小写
var pattern3 = /.at/gi;
- 模式中使用的所有 元字符 都必须转义:([ { ^ $ |) ? * + . ] }
- 使用 RegExp 构造函数,两个参数都必须是字符串,所有元字符都要双重转义
// 匹配第一个 "bat" 或 "cat", 不区分大小写
var patter1 = /[bc]at/i;
// 匹配第一个 "[bc]at", 不区分大小写
var pattern2 = /\[bc\]at/i;
// 匹配所有以 "at" 结尾的 3 个字符的组合,不区分大小写
var pattern3 = /.at/gi
// 匹配所有 ".at", 不区分大小写
var pattern4 = /\.at/gi;
// 使用 RegExp 构造函数,所有元字符都要双重转义
// 两个参数都必须是字符串
var pattern4 = new RegExp("\\.at", "i");
RegExp 实例属性
-
RegExp 的每个实例都具有下列属性,通过这些属性可以取得有关模式的各种信息
- global 布尔值 表示是否设置了 g 标志
- ignoreCase 布尔值 表示是否设置了 i 标志
- lastIndex 整数 表示开始搜索下一个匹配项字符位置,从 0 算起
- multiline 布尔值 表示是否设置了 m 标志
- source 正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符串模式返回
var pattern1 = /\[bc\]at/i;
console.log(pattern1.global); // false
console.log(pattern1.ignoreCase); // true
console.log(pattern1.multiline); // false
console.log(pattern1.lastIndex); // 0
console.log(pattern1.source); // "\[bc\]at"
RegExp 实例方法
- exec() 专门为捕获组而设计的,接收一个参数,即要应用模式的字符串,然后返回包含第一个匹配项信息的数组;或者在没有匹配项的情况下返回 null
- 返回的数组虽然是 Array 的实例,但包含两个额外的属性:index 和 input
- index 表示匹配项在字符串中的位置
- input 表示表达式的字符串
- 即使在模式中设置了全局标志 (g),exec() 每次也只会返回一个匹配项,不设置 g 的时候,每次都返回第一个匹配项,设置了 g 的情况下,每次调用 exec()则都会在字符串中继续查找新匹配项
var txt = "mom and dad and baby";
var pattern = /mom(and dad( and baby)?)?/gi;
var matches = pattern.exec(txt);
console.log(matches);
// ["mom and dad and baby", "and dad and baby", "and baby", index: 0, input: "mom and dad and baby", groups: undefined]
- test() 接收字符串参数,匹配返回 true 不匹配返回 false
var txt = "000-00-0000";
var pattern = /\d{3}-\d{2}-\d{4}/;
if (pattern.test(txt)) {alert("The pattern was matched.");
}
- toString() toLocaleString() 都会返回正则表达式的字面量,与创建表达式的方式无关
- valueOf() 返回正则表达式本身