彩世界平台-彩世界时时app-彩世界开奖app苹果下载

热门关键词: 彩世界平台,彩世界时时app,彩世界开奖app苹果下载

您的位置:彩世界平台 > 新闻动态 > 彩世界时时appjavascript中的Regexp简单询问

彩世界时时appjavascript中的Regexp简单询问

发布时间:2019-09-04 14:50编辑:新闻动态浏览(120)

    /*****************  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.2cto.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(pattern1.test(text1)){
       console.log(RegExp["$_"]);      //"this has been a short summer"
       console.log(RegExp["$`"]);      //"this has been a "
       console.log(RegExp["$'"]);      //" summer"
       console.log(RegExp["$&"]);      //short
       console.log(RegExp["$+"]);      //s     最近的一次匹配捕获组(.)第一个字符放在了捕获组中
       console.log(RegExp["$*"]);      //false
     }
     /*
      * 除了上面的属性外,还有多达9个用于存储捕获组的构造函数属性。
      * 這些属性的语法RegExp.$1、RegExp.$2....RegExp.$9
      * 分别储存第一,第二.....第九个匹配的捕获组。在调用exec(),test()方法时,這些属性会自动填充。
      * 即便调用test()返回一个布尔值,RegExp构造函数的属性$1,$2也会自动填充的。
     */
     var text2 = 'this has been a short communication'
     var pattern2 = /(..)ic(...)o(.)/;
     if(pattern2.test(text2)){
       console.log(RegExp.$1);   //un
       console.log(RegExp.$2);   //ati
       console.log(RegExp.$3);   //n
     }
     
    /*******************************字符串的模式匹配方法**********************/
    /*
     * match() 
               @param : 一个参数,正则表达式或者RegExp对象。
               @return : 返回一个数组,和exec()类似。
     * search(regexp)
               @param :和match()参数相同。
               @return :字符串中第一个与 regexp 相匹配的子串的起始位置。返回第一个匹配的索引;如果没找到返回-1;
               @explain :始终从字符串的开头向后查找
     * replace(regexp/string,string/function)
               @param : 第一个参数是RegExp对象或者一个字符串(字符串不会被转换为正则表达式),(用什么模式或者字符串来替换)
               @param :第二个参数可以是个字符串或者是一个函数(被替换的内容)
               @return : 一个新的字符串,是用 string/function 替换了 regexp/string 的第一次匹配或所有匹配之后得到的。
               @explain :要替换所有子字符串,必须提供一个正则表达式,并且设置了全局(g)
               @extra : 如果第二个参数是个字符串,可是可以使用字符序列(短属性名方式),将正则表达式操作得到的值插入到结果字符串中
       split(string/regexp,Array.length)
               @param : 第一个参数可以是分隔符,分隔符可以是字符串,或者是一个regexp对象
               @param : 规定数组的长度,以便返回的数组不会超过指定长度。
               @return : array 返回一个匹配后的数组。
    */
    var text = 'cat, bat, sat, fat';
    var pattern = /.at/;
    //与pattern.exec(text)相同
    var matches = text.match(pattern);
    console.log(matches.index);        //0
    console.log(matches[0]);           //cat
    console.log(pattern.lastIndex);    //0
     
    var text1 = 'sst, bat, sat, fat';
    var pos = text1.search(/at/);
    var pos1 = text1.search(/at/);
    console.log(pos,pos1);             //6 6 匹配上了bat
     
     
    var result = text.replace('at', 'oncat');
    console.log(result);               //concat, bat, sat, fat
    var result1 = text.replace(/at/g, 'fs');
    console.log(result1);              //cfs, bfs, sfs, ffs
     
    //第二个参数为字符串的; $1,捕获组的第一项,也就是(.at)匹配到的
    var result2 = text.replace(/(.at)/g, 'fuck[$1]');
    console.log(result2);              //fuck[cat], fuck[bat], fuck[sat], fuck[fat]
     
    var colorText = "red,blue,green,yellow";
    var r1 = colorText.split(",");
    var r2 = colorText.split("," ,2);
    var r3 = colorText.split(/[^,]+/);
    console.log(r1);                   //["red", "blue", "green", "yellow"]
    console.log(r2);                   //["red", "blue"]
    console.log(r3);                   //["", ",", ",", ",", ""]  

    Javascript是面向对象开发的脚本语言,既然javascript是面向对象开发的,那么面向对象的前提:抽象,应该必须有,那么看看这个对象的创建,该如何抽象,然后封装呢?那么来看看javascript中对象的创建。

     摘自  Jalen

    一、创建对象

    RegExp对象的主要方法:*********************/ /* * exec() : 该方法专门为捕获组设计的。 @param : 接受一个参数,要应用模式的字符串...

    简单的对象创建:

     var box = new Object();                  //创建一个 Object 对象
     box.name = 'Lee';                        //创建一个 name 属性并赋值 
     box.age = 100;                           //创建一个 age 属性并赋值
     box.run = function ()
      {                                       //创建一个 run()方法并返回值
       return this.name + this.age + '运行中...';
     };
    

    这样一个简单的类就创建完成。

    二、封装——构造函数/工厂方法

    不难看出,以上的对象创建方式,如果创建多个类似的对象,那么首要问题就是代码重复。所以我们要创建可以复用并且保持独立的对象(独立:当该对象有多个实例时,彼此引用操作该对象后,使得该对象保持不变)。

    方法一:工厂方法

     function createObject(name, age) 
      {    //集中实例化的函数 
       var obj = new Object(); 
       obj.name = name;
        obj.age = age; 
       obj.run = function ()
        {
         return this.name + this.age + '运行中...';
       };
        return obj;
      }
      var box1 = createObject('Lee', 100); //第一个实例
      var box2 = createObject('Jack', 200); //第二个实例
       alert(box1.run());
      alert(box2.run()); //保持独立
    

    方法二:构造函数

    构造函数方式

    彩世界时时app 1

      function Box(name, age)
       {    //构造函数模式
        this.name = name;
        this.age = age; 
       this.run = function ()
        {
         return this.name + this.age + '运行中...';
       };
      }
      var box1 = new Box('Lee', 100);    //new Box()即可
       var box2  =  new Box('Jack', 200);
      alert(box1.run());
      alert(box1 instanceof Box);
    

    区别

    构造函数方法

    1.没有显示的创建对象(new Object());

    2.直接将属性和方法赋值给this 对象;

    本文由彩世界平台发布于新闻动态,转载请注明出处:彩世界时时appjavascript中的Regexp简单询问

    关键词:

上一篇:jquery央浼ie缓存,数据不更新的标题

下一篇:没有了