正则表达式基本用法A

来源:互联网 发布:论文修改软件 编辑:程序博客网 时间:2024/04/27 14:42
  1. ?---表示紧贴其前的元素项是可选的。应用如下:abc?能匹配abc和ab。如果要匹配多个字符,那么就要用括号将之括起来。应用如下:a(bc)?能和a和abc匹配。/d{5}(-/d{5})?----它表示15252-12345或15252这样的匹配。
  2. ()---表示子匹配,字匹配按照从左到右的顺序一次存储在缓冲区,该过程称之为捕获。应用如下:
     /1...../n----它表示从第一个到第n个捕获。(/d)(/d)/1/2它表示2525这样的表示。
  3. Regexp对象-----
    隐式声明采用: re = /pattern/[flags]   显示声明采用 re = new RegExp("pattern",["flags"])
    Pattern
    必选项。要使用的正则表达式模式。如果使用语法 1,用 "/" 字符分隔模式。如果用语法 2,用引号将模式引起来。
    flags参数:
    g:全局标志,有了它就能对全文进行匹配,否则只匹配最先出现的内容
    i:忽略大小写
    m:多行标志,没有有这个标志,那么^匹配开始位置,$匹配结束位置。有则搜索/n与/r之后的位置。
    使用/的时候,当为显示声明应为////。但是隐式声明为//。
  4. Regexp对象的属性
    静态属性
    index:是当前表达式模式首次匹配内容的开始位置,从零开始,其初始值为-1,每一次匹配其值都会发生改变。
    input:返回当前作用的字符串,可以简写为$_,初始值为空字符串
    lastIndex:首次成功匹配的字符的下一个位置,从零开始,基本作为下一次搜索的位置,初始值为-1,成功匹配后其值也发生改变。
    lastMatch:当前匹配的最后一个字符串,可以简写为$&,初始值为空字符串,每一次匹配其值都会发生改变。

    lastParen:最后一个子匹配,可以简写为$+,初始值为空字符串,每一次匹配其值都会发生改变。

    leftContext:当前匹配的最后一个字符串左边的所有内容,可以简写为$`(esc下的字符),初始值为空字符串,每一次匹配其值都会发生改变

    rightContext:当前匹配的最后一个字符串右边的所有内容,可以简写为$‘(esc下的字符),初始值为空字符串,每一次匹配其值都会发生改变
    $1...$9:九个子匹配,Regexp对象只能记录最后九个。
    实例属性:

    global:(g)全局标志,有了它就能对全文进行匹配,否则只匹配最先出现的内容
    ignorceCase:(i)忽略大小写
    multiLine:(m)多行标志,没有有这个标志,那么^匹配开始位置,$匹配结束位置。有则搜索/n与/r之后的位置。
    source:返回对象的文本字符串。
  5. test()方法:是否匹配,匹配返回true,否则反之。应用如下:
        <html>
        <head>
        <title>创建正则表达式 </title>
        <script language = "JavaScript">
            var myString="这是第一个正则表达式的例子";
            var myregex = new RegExp("一个");  // 创建正则表达式
            if (myregex.test(myString)){
                alert("找到了指定的模式!");
            }
            else{
                alert("未找到指定的模式。");
            }
        </script>
        </head><body></body>
        </html>
  6. exec()

    用正则表达式模式在字符串中运行查找,并返回包含该查找结果的一个数组。
    rgExp.exec(str)

    参数

    rgExp
    必选项。包含正则表达式模式和可用标志的正则表达式对象。

    str
    必选项。要在其中执行查找的 String 对象或字符串文字。


    如果 exec 方法没有找到匹配,则它返回 null。如果它找到匹配,则 exec 方法返回一个数组,并且更新全局 RegExp 对象的属性,以反映匹配结果。数组的0元素包含了完整的匹配,而第1到n元素中包含的是匹配中出现的任意一个子匹配。这相当于没有设置全局标志 (g) 的 match 方法。
    如果为正则表达式设置了全局标志,exec 从以 lastIndex 的值指示的位置开始查找。如果没有设置全局标志,exec 忽略 lastIndex 的值,从字符串的起始位置开始搜索。

    exec 方法返回的数组有三个属性,分别是 input、index 和 lastIndex。Input 属性包含了整个被查找的字符串。Index 属性中包含了整个被查找字符串中被匹配的子字符串的位置。LastIndex 属性中包含了匹配中最后一个字符的下一个位置。

    <script language="javascript">
     var strSrc = "xxa1b01c001yya2b02c002zz";
     var re = /a(/d)b(/d{2})c(/d{3})/gi;
     var arr, count = 0;
     while ((arr = re.exec(strSrc)) != null)
     {
      displayResult();
     }
     function displayResult()
     {
      document.write("<p>这是用正则表达式/" + re.source + "/gi对字符串<br>/""
        + RegExp.input + "/"进行第" + (++count) + "次搜索的结果:<br>");
      document.write("RegExp.index为" + RegExp.index + "<br>");
      document.write("RegExp.lastIndex为" + RegExp.lastIndex + "<br>");
      document.write("RegExp.lastMatch为" + RegExp.lastMatch + "<br>");
      document.write("RegExp.lastParen为" + RegExp.lastParen + "<br>");
      document.write("RegExp.leftContext为" + RegExp.leftContext + "<br>");
      document.write("RegExp.rightContext为" + RegExp.rightContext + "<br>");
      document.write("RegExp.$1为" + RegExp.$1 + "<br>");
      document.write("RegExp.$2为" + RegExp.$2 + "<br>");
      document.write("RegExp.$3为" + RegExp.$3 + "<br>");
      document.write("RegExp.$4为" + RegExp.$4 + "<br>");
      document.write("arr.index为" + arr.index + "<br>");
      document.write("arr.input为" + arr.input + "<br>");
      document.write("arr.lastIndex为" + arr.lastIndex + "<br>");
      document.write("返回数组的元素个数为" + arr.length + "<br>");
      document.write("返回数组的内容为[");
      for(var i=0; i<arr.length; i++)
      {
       if(i < arr.length-1)
        document.write("/"" + arr[i] + "/",");
       else
        document.write("/"" + arr[i] + "/"]</p>");
      }
     }
    </script>
  7. compile("pattern",["flags"])
    更换正则对象的表达式模式,并将新的模式指定为内部模式,从而使匹配的过程执行更快。
    A->B->A当出现这样的方式后最好用以上的方法。


             

 

 

原创粉丝点击