RegExp
ECMAScript通过RegExp类型来支持正则表达式
1. 创建
创建一个正则表达式,有两种方式
字面量【常用】
var pattern = /test/;
- 构造RegExp实例
var pattern = new RegExp("test");
两种方式的比较:
- 如果正则是已知的,则优先选择字面量语法
- 如果需要在运行时通过动态构建的字符串来创建正则表达式,则通过构造器的方式
使用正则表达式字面量和使用RegExp构造函数创建的正则表达式不一样,在ECMAScript3中,正则表达式字面量始终会共享一个RegExp实例。在ECMAScrpt5明确规定,使用正则表达式字面量必须像直接调用RegExp构造函数一样,每次都创建新的RegExp实例
2. 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;
3. RegExp实例属性
- global:布尔值,是否设置g标志
- ignoreCase:布尔值,是否设置i标志
- multiline:布尔值,是否设置m标志
- lastIndex:整数,表示开始搜索下一个匹配的字符位置,从0算起
- source:正则表达式的字符串表示
var pattern = /\[bc\]at/i;
pattern.global; //false
pattern.ignoreCase; //true
pattern.multtline; //false
pattern.lastIndex; //0
pattern.source; //'\[bc\]at'
4. RegExp实例方法
4.1 exec()
专门为捕获组而设计的,只接收要应用模式的字符串,然后返回包含第一个匹配项信 息的数组,返回的数组是Array的实例,同时包含两个额外的属性: 1. index(匹配项在字符串中的位置) 2. input(应用正则表达式的字符串) 第一项是与整个模式匹配的字符串,其他项是与模式中的捕获组匹配的字符串; 如果没有匹配项则返回null。
var text = 'mom and dad and baby';
var pattern = /mom( and dad( and baby)?)?/gi;
var matches = pattern.exec(text);
matches.index; //0
matches.input; //'mom and dad and baby'
matches[0];//'mom and dad and baby'
matches[1];//' and dad and baby'
matches[2];//' and baby'
4.2 test()
接收一个字符串参数,在该模式有参数匹配的情况下返回true,否则返回false
var text = '000-00-0000';
var pattern = /\d{3}-\d{2}-\d{4}/;
if(pattern.test(text)){
console.log('matched');
}
5. RegExp构造函数属性
RegExp构造函数包含一些属性,这些属性适用于作用域中的所有正则表达式,并且基于所执行的最近一次正则表达式操作而变化。
var text = 'this has been a short summer';
var pattern = /(.)hort/g;
/*
*注意:Opera不支持input、lastMatch、lastParen和Multiline属性
*IE不支持multiline属性
*/
if(pattern.test(text)){
console.log(RegExp.input); //this has been a short summer
console.log(RegExp.lastParen);//s
console.log(RegExp['$1']);//s
console.log(RegExp.lastMatch);//short
console.log(RegExp['$&']); //short
}
模式的局限性
不支持的特性
- 匹配字符串开始和结尾的\A 和\Z 锚
- 向后查找(lookbehind)
- 并集和交集类
- 原子组(atomic grouping)
- Unicode 支持(单个字符除外,如\uFFFF)
- 命名的捕获组
- s(single,单行)和x(free-spacing,无间隔)匹配模式
- 条件匹配
- 正则表达式注释
来源
- 《JavaScirpt高级程序设计》
- 《JavaScript忍者秘籍》