zoukankan      html  css  js  c++  java
  • JavaScript高级程序设计6.pdf

    ECMAScript通过RegExp类型来支持正则表达式

    var expression=/pattern/flags;其中模式(pattern)部分是正则表达式,可以包含字符类、限定符、分组、向前查找以及反向引用。每个正则表达式都可以带有一或多个标志(flags),用以标明正则表达式的行为

    正则表达式的匹配模式支持3个标志:

    g:表示全局(global)模式,应用于所有字符串,而非发现第一个就立即停止;

    i:表示不区分大小写(case-insensitive)模式,匹配项时忽略模式与字符串的大小写;

    m:表示多行(multiline)模式,到达一行的文本末尾时还会继续查找下一行;

    var pattern1=/at/g;

    var pattern2=/[bc]at/i;

    var pattern3=/.at/gi;

    所有的元字符都必须转义(、)、{、}、[、]、、?、.、+、*、^、$、|

    var pattern1=/[bc]at/i

    除了字面量形式定义正则表达式,还可以使用RegExp构造函数,它接收两个参数,一个是要匹配的字符串模式,另一个是可选的标志字符串

    var pattern1=/[bc]at/i;

    var pattern2=new RegExp("[bc]at","i");

    由于构造函数里使用的是字符串,所以要对所有元字符进行双重转义 字面量:/[bc]at/ 字符串:"\[bc\]at" 字面量:/w\hello\123/ 字符串:"\w\\hello\\123"

    在ECMAScript中正则表达式字面量始终共享一个RegExp实例,而构造函数创建的每一个新的RegExp实例都是一个新实例

    var re=null,

      i;

    for (i=0;i<10;i++)

      {

      re=/cat/g;

      re.test("catastrophe");

      }

    for (i=0;i<10;i++)

      {

      re=new RegExp("cat","g");

      re.test("catastrophe");

      }

    RegExp实例属性

    global:布尔值,是否设置了g标志

    ignoreCase:布尔值,是否设置了i标志

    lastIndex:整数,表示开始搜索下一个匹配项的字符位置,从0算起

    multiline:布尔值,是否设置了m标志

    source:正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符串模式返回

    var pattern1=/[bc]at/i;

    alert(pattern1.global);  //false

        ......

    alert(pattern1.source);  //"[bc]at"

    RegExp对象的主要方法是exec(),它接受一个参数即要应用模式的字符串。然后返回包含第一个匹配项信息的数组,没有匹配项的情况下返回null

    返回的数组是Array的实例,包含两个额外的属性index和input,index表示匹配项在字符串中的位置,而input表示应用正则表达式的字符串

    var text="mom and dad and baby";

    var pattern=/mom(and dad(and baby)?)?/gi;

    var matches=pattern.exec(text);

    alert(matches.index);  //0

    alert(matches.input);  //"mom and dad and baby"

    alert(matches.[0]);  //"mom and dad and baby"

    alert(matches.[1]);  //"and dad and baby"

    alert(matches.[2]);  //"and baby"

    正则表达式的第二个方法是test(),它接受一个字符串参数,在该模式与该参数匹配的情况下返回true,用在if语句很方便

    var text="000-00-0000";

    var pattern=/d{3}-d{2}-d{4}/;

    if(pattern.test(text))

      {

      alert("The pattern was matched.");

      }

    RegExp构造函数包含一些属性,这些属性适用于作用域中的所有正则表达式,有两种方式访问它们

    长属性名    短属性名    说明

    input      $_      最近一次要匹配的字符串

    lastMatch    $&      最近一次的匹配项

    lastParen    $+      最近一次匹配的捕获组

    leftContext   $`      input字符串中lastMatch之前的文本

    multiline      $*      布尔值,是否使用多行模式

    rightContext   $'      input字符串中lastMatch之后的文本

    alert(RegExp.input);  //...

        ......

    ECMAScript中的正则表达式缺少一些如Perl所支持的高级正则表达式特性,却是够用了

    -------------------------------------------------------------------------每天一点点-----------------------------------------------------------------------------------

  • 相关阅读:
    【BZOJ3995】[SDOI2015]道路修建 线段树区间合并
    [Noip2016]天天爱跑步 LCA+DFS
    【BZOJ2870】最长道路tree 点分治+树状数组
    【BZOJ3730】震波 动态树分治+线段树
    【BZOJ2969】矩形粉刷 概率+容斥
    【BZOJ3029】守卫者的挑战 概率+背包
    【BZOJ3043】IncDec Sequence 乱搞
    【BZOJ3124】[Sdoi2013]直径 树形DP(不用结论)
    Django学习笔记之ORM多表操作
    SQL学习笔记之项目中常用的19条MySQL优化
  • 原文地址:https://www.cnblogs.com/sdgjytu/p/3648850.html
Copyright © 2011-2022 走看看