黑铁时代
Programing is not only one kind of technology, but also one kind of art.

RegExp对象即正则表达式对象,JS中的正则表达式对象可以有两种方式表示:字面量方式构造函数方式

 

var reg = /name/ig; // 字面量的表达方式

var reg = new RegEXp("name", "ig"); // 构造函数表达方式

上诉两种方式是完全等价的,对于第一种方式,需要用两个/将匹配模式放入其中,后面的ig是标志符;第二种方式不需要使用/,直接将匹配模式的字符串作为第一个参数,标志符的字符串作为第二个参数。

 

在ECMAScrip中定义了三种标志符:

  1. i 表示区分大小写,即大小写敏感,不使用i标志符即忽略大小写;

  2. g 表示进行全局匹配,当匹配第一次成功后,会继续向后匹配下一个满足的字符串直到末尾;

  3. m 表示进行多行匹配的模式,即到了每一行末尾都会继续跳到下一行继续匹配;

模式中如果要匹配元字符(包括:( ) [ ] { } \ ^ $ | . * ? + ),同样需要使用\进行转义。比如像匹配 这个元字符,那么字面量表达方式是就是 var reg = /\.s/ig; 如果使用构造函数方式就是 var reg = new RegExp("\\.s", "ig"); ,当用字符串表示正则表达式的时候,需要进行双重转义,即字面量中的一个\在用字符串表示的时候就变成两个\\。

 

继续来看正则表达式对象的主要属性,当我们创建一个RegExp对象后,这个对象就具有一下属性:

  1. global 标识是否设置了g标志符;

  2. ignoreCase 标识是否设置了i标志符;

  3. multiline 标识是否设置了m标志符;

  4. lastIndex 表示开始搜索下一次匹配项的起始位置,初始值为0;

  5. source 用于匹配的模式;

除了属性,还有两个很有用的方法;

  1. test:传入一个字符串作为参数,正则表达式匹配成功就返回true,否则返回false。我们不用关心匹配的具体情况,只需要知道字符串中是否存在匹配的时候,使用这个方法;

  2. exec:这个方法的功能要复杂一些,同样是传入一个我们需要搜索的字符串作为参数。如果没有匹配成功就返回null,如果成功了就返回一个数组对象,数组对象的第一项表示与整个模式匹配的字符串,如果匹配模式中存在捕获分组,那么从第二项开始就依次填入捕获分组的项。除了数组项,这个数组对象还包括index和input属性,index表示匹配的字符串在整个字符串中的位置,input则表示整个字符串。如果匹配模式设置了全局标志符,那么再次执行exec方法,会继续从上次匹配结束的地方,即lastIndex标识的位置开始继续搜索匹配的字符串,直到匹配失败之后,lastIndex就被重置为0。

 

例子:

  var str = "is as cs";

  var reg = /((.)s)/ig;

  console.log( reg.global ); // true
  console.log( reg.ignoreCase ); // true
  console.log( reg.multiline ); // false
  console.log( reg.lastIndex ); // 0
  console.log( reg.source ); // .s

  do {
    var m = reg.exec( s );

    if ( m ) {

      console.log( m ); // 保存匹配成功的数组项,包括捕获分组,["is""is""i"]
      console.log( m.input ); // 整个字符串,“is as cs”
      console.log( m.index ); // is在整个字符串中的位置,位置是0
      console.log( reg.lastIndex ); // 下一次匹配开始的位置,is后面的空格,位置是2
    }
  } while ( m ); // 只要m不是null就继续搜索

 

RegExp对象还包含一些属性,这些属性不是实例化的对象属性,它们是RegExp对象的属性,我们可以看做是静态属性:

  Input:最近一次要匹配的字符串;

  lastMatch: 最近一次的匹配项;

  lastParen:最近一次的匹配分组;

  leftContext:最近一次匹配字符串即Input中,lastMatch左边的字符串;

  rightContext:最近一次匹配字符串即Input中,lastMatch右边的字符串;

  $1,$2,$3...:在调用exec和text方法时,这些属性会依次表示所有的捕获分组;

  

posted on 2012-06-26 23:37  黑铁时代  阅读(202)  评论(0)    收藏  举报