Skip to content
Dn9x edited this page Aug 27, 2013 · 1 revision

JavaScript中通过RegExp类型来支持正则表达式.使用下面的语法:

var expression = / pattern / flags;

其中的模式pattern部分可以是任何形式的正则表达式, 每个正则表达式都可以带一个或多个标志(flags), 用以标明正则表达式的行为.共有三个标志:

  1. g:表示全局模式, 即模式将被应用到所有字符串。
  1. i:表示不区分大小写。
  1. m:表示多行模式
var pattren1 = /at/g;        //匹配所有字符串中含有“at"的实例

var pattren2 = /[bc]at/i;    //匹配第一个”bat“或“cat”不区分大小写

var pattren3 = /.at/gi;      //匹配所有以“at"结尾的三个字符组合,不区分大小写

上面是定义正则表达式的一种方式,通过字面量定义。当然还有另外一种方式定义正则表达式,使用RegExp构造函数:

var p2 = /at/gi;
var p3 = new RegExp("at", "gi");

上面这两种的效果是一样的,使用RegExp构造函数的时候要传入的必须是字符串。

###5.4.1 RegExp实例属性 RegExp的每个实例都具有下列属性,通过这些属性可以获取有关模式的各种信息。

  1. global:布尔值,表示是否设置了g标志
  1. ignoreCase:布尔值,表示是否设置了i标志
  1. lastIndex:整数,表示开始搜索下一个匹配项的字符位置,从0算起
  1. multiline:布尔值,表示是否设置了m标志
  1. source:正则表达式的字符串表示
var p = /\[bc\]at/i;

alert(p.global);		//false
alert(p.ignoreCase);	//true
alert(p.multiline);		//false
alert(p.lastIndex);		//0
alert(p.source);		//"\[bc\]at"

###5.4.2 RegExp实例方法

####1. exec() exec()接受一个参数,即要应用模式的字符串,然后返回一个匹配项的数组。没有匹配项的时候返回null, 虽然返回的结果是Array, 但是这个数组包含额外的两个属性:index, input。 ”index“表示匹配项在字符串中的位置, 而”input“表示应用正则表达式的字符串。

var text = "mom and dad and baby";

var pattern = /mom( and dad( and baby)?)?/gi;

var matches = pattern.exec(text);

console.log(matches);   
//["mom and dad and baby", " and dad and baby", " and baby", index: 0, input: "mom and dad and baby"] 

可见结果如上。

####2. test() test()方法接收一个字符串参数,如果匹配就返回true, 否则返回false;

var p = /\[bc\]at/i;
alert(p.test("bcats"));		//false

####5.4.3 RegExp构造函数属性 RegExp构造函数包含一些属性,而且作用域作用域中的所有正则表达式,可以通过一个长属性名称或短属性名访问(Opera不支持短属性名),

------------------------------------------------------------------------------------------
        长属性名           短属性名             说明
------------------------------------------------------------------------------------------
	input             $_                  最近一次要匹配的字符串           
------------------------------------------------------------------------------------------
	lastMatch         $&                  最近一次的匹配项
------------------------------------------------------------------------------------------
	lastParen         $+                  最近一次匹配的捕获组
------------------------------------------------------------------------------------------
	leftContext       $`                  input字符串中lastMatch之前的文本
------------------------------------------------------------------------------------------
	multiline         $*                  布尔值,表示是否所有表达式都是用多行模式,
------------------------------------------------------------------------------------------
	rightContext      $'                  input字符串中lastMatch之后的文本               
------------------------------------------------------------------------------------------

虽然这些属性好用,但是要注意很多浏览器的支持情况。下面有个有关使用的例子:

var text = "this has been a short summer";

var p = /(.)hort/g;

if(p.test(text)){
	alert(RegExp.input);           //this has been a short summer
	alert(RegExp.leftContext);     //this has been a 
	alert(RegExp.rightContext);    //summer
	alert(RegExp.lastMatch);       //short
	alert(RegExp.lastParen);       //s
	alert(RegExp.multiline);       //false
}