首页 > 代码库 > js中RegExp对象01

js中RegExp对象01

一:定义方式

  ①字面量方式    var pattern = /pattern/attributes

  ②构造函数方式  var pattern = new RegExp("pattern","attributes");

  attributes参数:可以取值 g (global:是否全局)  ;  i (ignoreCase:是否忽略大小写)  ;  m(multiline:是否多行)

  如果前边的"pattern"是一个RegExp对象,则必须删除该参数,否则会有TypeError异常抛出;

  《返回值》返回一个新的RegExp对象;但是如果只是使用RegExp()方法而没有使用new,并且pattern是一个RegExp对象的时候,就只是返回pattern而不会创造新对象;

  《抛出异常》

  SyntaxError - 如果 pattern 不是合法的正则表达式,或 attributes 含有 "g"、"i" 和 "m" 之外的字符,抛出该异常。

  TypeError - 如果 pattern 是 RegExp 对象,但没有省略 attributes 参数,抛出该异常。

二:实例属性

  这些都没有什么太大用处,暂时可以参考《JavaScript高级程序设计》(第3版)P105 下方的内容;以后有时间更新;

  lastIndex用的比较多;开始搜索下一个匹配项的字符位置,从0开始;

三:实例方法

  compile();这个只有在W3c上面见到,具体什么作用我到现在还不是很明白,望明白的大神赐教;

  exec();  用于检测正则表达式在字符串中的匹配,并返回一些结果;RegExpObject.exec(string)

    当正则表达式中没有g标志的时候,此方法返回结果与String对象中支持正则表达式的方法match()相同;返回一个数组;但是exec()方法返回的数组中,第一个元素

    是当前匹配内容,但是第二个是正则表达式中第一个子表达式(捕获组)的匹配内容(如果有的话),第三个是正则表达式中第二个子表达式(捕获组)的匹配内容(如果有的话),依次类推;

    但是当含有g的时候,String中的match()能够一次性将所有符合的找到,但是exec()一次只找到一个;

    exec()方法返回除了数组和length属性以外,还有index属性和input属性;index中存放的是当前匹配内容在字符串中的位置,input是用于匹配的字符串的内容;

    如果含有g,每执行一次exec(),RegExp的实例对象属性lastIndex的值就会发生一次变化,值变成当前匹配项最后一个字符位置的下一个位置,下次搜索匹配

    项的时候,就会从这个位置开始,而不会从头开始,如果到最后没有找到合适的,exec()方法就会返回null。 

 提示和注释

    重要事项:如果在一个字符串中完成了一次模式匹配之后要开始检索新的字符串,就必须手动地把 lastIndex 属性重置为 0。

    提示:请注意,无论 RegExpObject 是否是全局模式,exec() 都会把完整的细节添加到它返回的数组中。这就是 exec() 与 String.match() 的不同之处,后者在全局模式下返回的信息要少得多。因此我    们可以这么说,在循环中反复地调用 exec() 方法是唯一一种获得全局模式的完整模式匹配信息的方法。

  

<script>        var text = "mom and dad and baby mom and dad and baby";        var pattern = /(mom (and dad (and baby)?)?)/gi;        var matches;        while((matches = pattern.exec(text)) != null){            document.write("index:"+matches.index);            document.write("<br/>");            document.write("input:"+matches.input);            document.write("<br/>");            document.write("matches长度:"+matches.length);            document.write("<br/>");            document.write(matches[0]);            document.write("<br/>");            document.write(matches[1]);            document.write("<br/>");            document.write(matches[2]);            document.write("<br/>");            document.write(matches[3]);            document.write("<br/>");        }</script>

    下面是执行结果:

index:0input:mom and dad and baby mom and dad and babymatches长度:4mom and dad and babymom and dad and babyand dad and babyand babyindex:21input:mom and dad and baby mom and dad and babymatches长度:4mom and dad and babymom and dad and babyand dad and babyand baby

 

  test();方法用于检测一个字符串是否匹配某个模式.RegExpObject.test(string)

     当正则表达式的实例对象使用该方法的时候,实例属性,lastIndex也会发生类似于exec()的变化。 下面是一个实例:  

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>RegExp 对象的内容03</title></head><body>    <script>        var re = null;        var i;        for(i=0;i<10;i++){            re = /cat/g;            var t1 = re.test("catastrophe");            document.write(t1);//true            document.write("<br/>");            document.write(re.lastIndex);//3            document.write("<br/>");            var t2 = re.test("catastrophe");            document.write(t2);//false            document.write("<br/>");            document.write(re.lastIndex);//0            document.write("<br/>");        }        document.write("<br/>");        for(i=0;i<10;i++){            re = new RegExp("cat","g");            var t3 = re.test("catastrophe");            var t4 = re.test("catastrophe");            document.write(t3);//true            document.write("<br/>");            document.write(t4);//false            document.write("<br/>");        }        document.write("<br/>");        var str = "catastrophe";        for(i=0;i<10;i++){            re = new RegExp("cat","g");            var t5 = str.match(re);            document.write(t5);//cat            document.write("<br/>");            document.write(re.lastIndex);//0            //如果是使用String对象支持的match(),则正则实例属性lastIndex不会发生变化            document.write("<br/>");        }    </script></body></html>

四:RegExp构造函数属性

  目前这些都不是很重要,暂时可以参考《JavaScript高级程序设计》(第3版)P105 下方的内容;以后有时间更新;

js中RegExp对象01