当前位置:编程学习 > JAVA >>

javascript中的Regexp简单了解

/*****************  RegExp对象的主要方法:*********************/
 /*
  * exec() : 该方法专门为捕获组设计的。
             @param : 接受一个参数,要应用模式的字符串
             @return : 返回包含第一个匹配项信息的数组(array),没有匹配项的情况下返回null
         @explain : 返回的数组是Array的实例,并且包含2个额外的属性:
                    index - 表示匹配项在字符串中的位置
                    input - 表示应用正则表达式的字符串 
                    数组中的第一项是与整个模式匹配的字符串,其他项是模式中的捕获组匹配的字符串(如果没有捕获组,则返回数组只包含一项)
 */
  var text = 'gid and var and global';
  var patterns = /gid( and var( and global)?)?/;
  var matches = patterns.exec(text);
  console.log(matches.index);   //0 整个字符串从0位置开始就与模式匹配,所以返回的数组matches的index为0
  console.log(matches.input);   //"gid and var and global" 表示正则表达式要匹配的字符串
  console.log(matches[0]);      //"gid and var and global" 数组第一项是匹配的整个字符串
  console.log(matches[1]);      //" and var and global"   ( and var( and global)?)?第二项包含的是与第一个捕获组匹配的内容
  console.log(matches[2]);      //" and global"           ( and global)? 第三项包含与第二个捕获组匹配的内容
  console.log(matches[3]);      //undefined               没有第三个捕获组, return undefined
 
  //exec()方法,即使在模式中设置了全局标志(g),他每次也只会返回一个匹配项。
  //不设置全局标志的情况下,在同一个字符串上多次调用exec()将始终返回第一个匹配项的信息,
  //而在设置了(g)下,在同一个字符串上多次调用exec()则都会返回字符串中继续查找新匹配项
  //{IE下lastIndex即使在非g模式下,也会每次变化。}
 
  var txt = 'cat, bat, sat, fat';
  var patterns1 = /.at/;
  var matches1 = patterns1.exec(txt);
  console.log(matches1.index);            //0 从0位置开始就已经匹配到了
  console.log(matches1[0]);               //cat
  console.log(patterns1.lastIndex);       //0 开始搜索下一个匹配项的字符串位置。
 
  matches1 = patterns1.exec(txt);         
  console.log(matches1.index);            //0
  console.log(matches1[0]);               //cat
  console.log(patterns1.lastIndex);       //0
 
  var patterns2 = /.at/g;
  var matches2 = patterns2.exec(txt);
  console.log(matches2.index);            //0
  console.log(matches2[0]);               //cat
  console.log(patterns2.lastIndex);       //3
 
  matches2 = patterns2.exec(txt);
  console.log(matches2.index);            //5
  console.log(matches2[0]);               //bat
  console.log(patterns2.lastIndex);       //8
 
  /*
   * test() 
   * @param : {type:String}   
   * @return : {type:Boolean}
   * @explains : 匹配的情况下return true,否则return false, 
  */
  var stxt = '000-12-2354';
  var patterns3 = /\d{3}-\d{2}-\d{4}/;
  if(patterns3.test(stxt)){
    console.log("match sucess!")
  }
  /*
   * toLocalString()和toString()
   * @return :返回正则表达式的字面量形式,与创建正则表达式的方式无关。
  */
  var patterns4 = new RegExp("\\[bc\\]at","gi");
  var patterns5 = /\[bc\]at/gi;
  console.log(patterns4.toLocaleString(),patterns4.toString());   // /\[bc\]at/gi   /\[bc\]at/gi
  console.log(patterns5.toLocaleString(),patterns5.toString());   // /\[bc\]at/gi   /\[bc\]at/gi
 
/*****************  RegExp构造函数的属性(這些属性在其他语言里被看作是静态属性):*********************/
/*
 * 分为长属性名和短属性名
 * input           $_        最近一次要匹配的字符串
 * lastMatch       $&        最近一次的匹配项
 * lastParen       $+        最近一次匹配的捕获组
 * leftContext     $`        input字符串中lastMatch之前的文本
 * multiline       $*        布尔值,表示是否所有表达式都使用多行模式。
 * rightContext    $'         input字符串中lastMatch之后的文本
 * 這些属性适用于作用域中的所有正则表达式 www.zzzyk.com
 * 注意:opera不支持input、lastMatch、lastParen和multiline属性
 * IE不支持multiline属性
*/
 var text = 'this has been a short summer';
 var pattern = /(.)hort/g;
 
 if(pattern.test(text)){
   console.log(RegExp.input + ';','shortAttr:' + RegExp.$_ + ';');//this has been a short summer
   console.log(RegExp.leftContext);    //"this has been a"  匹配short之前文本
   console.log(RegExp.rightContext);   //" summer"          匹配short之后文本
   console.log(RegExp.lastMatch);      //"short"            最后一次的匹配项
   console.log(RegExp.lastParen);      //"s"                最近的一次匹配捕获组(.)第一个字符放在了捕获组中
   console.log(RegExp.multiline);      //false;             不支持多行模式
 }
 
 //通过短属性名来代替,由于短属性名大都不是有效的ECMAScript标识符,因此必须通过方括号语法来访问他们。
 var text1 = 'this has been a short summer';
 var pattern1 = /(.)hort/g;
 if(p

补充:web前端 , JavaScript ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,