新建正则表达式
1. var regex = /xyz/; 以 斜杠 代表开始和结束
2. var redex = new RegExp('xyz'); 利用 RegExp构造函数
上面两种写法是等价的,都新建了一个内容为xyz的正则表达式对象。
它们的主要区别是,
第一种方法在引擎编译代码时,就会新建正则表达式,
第二种方法在运行时新建正则表达式,所以前者的效率较高。
而且,前者比较便利和直观,所以实际应用中,基本上都采用字面量定义正则表达式。
RegExp构造函数还可以接受第二个参数,表示修饰符(详细解释见下文)
var regex = new RegExp('xyz', 'i');
// 等价于
var regex = /xyz/i;
实例属性
正则对象的实例属性分为两类:一类是修饰符相关,表示对应的修饰符是否设置。
RegExp.prototype.ignoreCase:返回一个布尔值,表示是否设置了i修饰符。
RegExp.prototype.global:返回一个布尔值,表示是否设置了g修饰符。
RegExp.prototype.multiline:返回一个布尔值,表示是否设置了m修饰符。
以上三个属性都是只读的
var r = /abc/igm;
r.ignoreCase // true
r.global // true
r.multiline // true
另一类是与修饰符无关的属性,主要有以下两个:
RegExp.prototype.lastIndex:返回一个数值,表示下一次开始搜索的位置。
该属性可读写,但是只在进行连续搜索时有意义,详细介绍请看后文。
RegExp.prototype.source:返回正则表达式的字符串形式(不包括反斜杠),该属性只读。
var r = /xyz/;
r.lastIndex //0
r.source //"xyz"
实例方法
1.RegExp.prototype.test()
返回值:布尔值。 表示当前模式是否能匹配参数字符串
/cat/.test('cats and dogs') // true
上面代码验证参数字符串之中是否包含cat,结果返回true。
如果正则表达式带有g修饰符,则每一次test方法都从上一次结束的位置开始向后匹配。
var r = /x/g;
var s = '_x_x';
r.lastIndex // 0
r.test(s) // true
r.lastIndex // 2
r.test(s) // true
r.lastIndex // 4
r.test(s) // false
上面代码的正则表达式使用了g修饰符,表示是全局搜索,会有多个结果。接着,三次使用test方法,每一次开始搜索的位置都是上一次匹配的后一个位置。
带有g修饰符时,可以通过正则对象的lastIndex属性指定开始搜索的位置
var r = /x/g;
var s = '_x_x';
r.lastIndex = 4;
r.test(s) // false
如果正则模式是一个空字符串,则匹配所有字符串。
new RegExp('').test('abc')
// true
2.RegExp.prototype.exec()
正则对象的exec方法,用来返回匹配结果。如果发现匹配,就返回一个数组,成员是匹配成功的子字符串,否则返回null;
var s = '_x_x';
var r1 = /x/;
var r2 = /y/;
r1.exec(s) // ["x"]
r2.exec(s) // null