JavaScript 正则表达式对象RegExp

 2016年01月03日    54     声明


RegExp是JavaScript提供的正则表达式对象,该对象会通过指定的正则表达式去匹配一类字符串。JavaScript String对象中的字符串查找、匹配、替换等方法就是使用RegExp对象进行模式匹配的。


1. RegExp语法结构

RegExp正则对象可以使用字面量方式,也可以使用构造函数。

使用字面量创建RegExp对象:

/pattern/attributes

使用RegExp对象的构造函数创建对象:

RegExp(pattern [, flags])
  • pattern
  • 正则表达式文本
  • flags,表示匹配模式,可以是下面的几种值:
    • g,全局匹配
    • i,忽略大小写
    • m,开始和结束字符(^ 和 $)在多行模式工作,即:^ 和 $ 可以匹配字符串中每一行的开始和结束(行是由 \n 或 \r 分割的),而不只是整个输入字符串的最开始和最末尾处

通过上在两种方式,都可以创建新具有指定的模式(pattern)和标志flagsRegExp 对象。创建对象时,如果不用new运算符,其行为与使用new运算符结果一致。


2. RegExp对象的使用

分别使用字面量和构造函数方式创建一个RegExp正则对象:

/ab+c/i;
new RegExp("ab+c", "i");

用字面量方式工创建RegExp对象时,不需要使用引号。但使用构造函数时,需要使用引号。

二者区别在于,字面量表达式被求值时,提供了正则表达式的编译状态。而构造函数,则是在正则表达式运行时编译的。使用时,如果已知正则表达式将会改变,或者从另一来源获取而不知道将使用什么模式,这时都应该使用构造函数。


3. RegExp对象实例属性

3.1 RegExp.prototype.global

只读属性。表示是否使用全局匹配,即:正则表达式是否使用了 "g" 标志。

var regex = new RegExp("foo", "g")
console.log(regex.global) // true


3.2 RegExp.prototype.ignoreCase

只读属性。表示是否使用忽略大小写模式,即:正则表达式是否使用了 "i" 标志。

var regex = new RegExp("Itbilu.com", "i")
console.log(regex.ignoreCase) // true

RegExp.prototype.lastIndex,可读写属性,用来指定下一次匹配的起始索引位置。该属性只在使用了表示全局匹配的"g" 标志时才会起作用


3.3 RegExp.prototype.multiline

只读写属性。表示是否使用了多行匹配模式,即:正则表达式是否使用了 "m" 标志。

var regex = new RegExp("itbilu.com", "m")

console.log(regex.multiline) // true


3.4 RegExp.prototype.source

只读写属性。表示当前进行正则匹配的源文本。

var regex = new RegExp("itbilu.com", "g")
console.log(regex.source) // itbilu.com


4. RegExp对象实例方法

4.1 RegExp.prototype.compile()

compile()方法用于在脚本执行过程中编译正则表达式,也可用于改变和重新编译正则表达式。

var str="Every man in the world! Every woman on earth!";

patt=/man/g;
str2=str.replace(patt, "person");
console.log(str2);	//Every person in the world! Every woperson on earth!

patt=/(wo)?man/g;
patt.compile(patt);
str2=str.replace(patt, "person");
console.log(str2);	//Every person in the world! Every person on earth!


4.2 RegExp.prototype.exec()

该方法会为指定的字符串执行执行一次正则匹配操作。其返回值是一个数组或者 null,匹配成功时会返回包含匹配结果的数组。

var str = "hello Itbilu.com"; 
var patt = new RegExp("itbilu","ig");
var result = patt.exec(str);

console.log(result);  // [ 'Itbilu', index: 6, input: 'hello Itbilu.com' ]
console.log(result[0]); //Itbilu
console.log(result.index); // 6


4.3 RegExp.prototype.test()

该方法会执行一次检索,用于查看指定正则表达式与要匹配的字符串是否匹配。返回 true 或 false。

console.log(/(it)/.test('itbilu.com')); //true