zoukankan      html  css  js  c++  java
  • 第五章 引用类型>RegExp类型

    RegExp类型(正则表达式)

    正则匹配模式支持的标志:

    var expression = /pattern/ flags;
    
    //flags即匹配模式标志

    g:    全局模式,被应用与所有字符串,而非发现第一个匹配性时立即停止。

    i:     不区分大小写模式。

    m:   多行模式,到达文本末尾还会继续查找下一行中是否存在匹配项。

    var pattern1 = /at/g;
    //匹配所有字符串中的at实例;
    
    var pattern2 = /bc[at]/i;

    //匹配所有at结尾的字符串,不区分大小写

    匹配元字符(即特殊符号 )时,必须转义

    正则表达式中其他字符的含义:

    {n, m} 匹配前一项至少n次,但是不能超过m次 
    {n, } 匹配前一项n次,或者多次 
    {n} 匹配前一项恰好n次 
    ? 匹配前一项0次或1次,也就是说前一项是可选的. 等价于 {0, 1} 
    + 匹配前一项1次或多次,等价于{1,} 
    * 匹配前一项0次或多次.等价于{0,} 
    ___________________________

    [...] 位于括号之内的任意字符 
    [^...] 不在括号之中的任意字符 
    . 除了换行符之外的任意字符,等价于[^ ] 
    w 任何单字字符, 等价于[a-zA-Z0-9] 
    W 任何非单字字符,等价于[^a-zA-Z0-9] 
    s 任何空白符,等价于[ t n r f v] 
    S 任何非空白符,等价于[^ t n r f v] 
    d 任何数字,等价于[0-9] 
    D 除了数字之外的任何字符,等价于[^0-9] 
    [] 一个退格直接量(特例) 

    ___________________________

    /d{2, 4}/ //匹配2到4间的数字.

    /w{3} d?/ //匹配三个单字字符和一个任意的数字.

    /s+javas+/ //匹配字符串"java" ,并且该串前后可以有一个或多个空格.

    /[^"] * / //匹配零个或多个非引号字符.

    RegExp的 实例属性

    正则的每个实例都具有下列属性:

    global:布尔值,是否设置了g标志(全局模式);

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

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

    lastIndexOf: 整数,表示开始搜索下一个匹配项的字符位置。

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

    var pattern1 =/[bc]at/i;
    
    console.log(pattern1.global);
    
    console.log(pattern1.ignoreCase);
    console.log(pattern1.multiline);
    console.log(pattern1.lastIndex);
    console.log(pattern1.source);
    
    // false
    // true
    // false
    // 0
    // [bc]at

    RegExp的 实例方法

    exec(): 为捕获组设计的,接受一个参数,即要应用模式的字符串(变量), 返回包含第一个匹配项信息的数组(Array的实例);没有匹配的情况返回null;  返回的数组包含2个额外属性:index (匹配项在字符中的位置)和 input(表示应用正则的字符串);

    var text = "mom and dad and baby";
    var pattern = /mom(and dad( and baby)?)?/gi;
    
    var matches = pattern.exec(text);
    console.log(matches.index);
    console.log(matches.input);
    console.log(matches[0]);
    console.log(matches[1]);
    console.log(matches[2]);
    // 0                                    表示匹配项再字符串中的位置
    // mom and dad and baby                 应用的匹配模式的字符串   
    // mom                                  第一个匹配的是mom
    // undefined                      

    exec(): 即使再模式中设置了全局标志(g),每次也只返回一个匹配项。如果再同一个字符串多次调用exec()将始终返回第一个匹配项。

    非全局模式下,每次调用exec(),返回的都是一个匹配项

    var text = "cat , bat, sat, fat";
    var pattern1 = /.at/;
    var matches = pattern1.exec(text);
    console.log(matches.index);
    console.log(matches[0]);
    console.log(pattern1.lastIndex);
    
    // 0
    // cat
    // 0
    
    
    matches = pattern1.exec(text);
    console.log(matches.index);
    console.log(matches[0]);
    console.log(pattern1.lastIndex);
    
    // 0
    // cat
    // 0

    全局模式下,每次调用exec()返回字符串中的下一个匹配项,直到搜索完毕。lastIndex值再每次调用exec都会增加

    var pattern2 = /.at/g;
    var matches = pattern2.exec(text);
    console.log(matches.index);
    console.log(matches[0]);
    console.log(pattern2.lastIndex);
    
    // 0
    // cat
    // 3
    
    matches = pattern2.exec(text);
    console.log(matches.index);
    console.log(matches[0]);
    console.log(pattern2.lastIndex);
    
    // 6
    // bat
    // 9

    test(): 接受一个字符串参数。再模式与该参数匹配的情况下返回true,不然返回false;用来判断目标字符串与模式是否匹配;

    var text = "000-00-0000";
    var pattern = /d{3}-d{2}-d{4}/;
    if(pattern.test(text)) {
        console.log("the pattern was mathesd.")
     }
    //  the pattern was mathesd.

    RegExp 构造函数属性

    (长属性名)input:              (短)$_       最近一次要匹配的字符串。

     lastMatch                           $&       最近一次的匹配项。

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

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

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

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

  • 相关阅读:
    寻找完全数(C++)
    莱布尼兹三角形(C++)
    简单的素数问题(C++)
    ubuntu17.04下安装LNMP
    ubuntu下连接mysql出现Access denied for user 'rose'@'localhost' (using password: NO)的解决方法
    快速理解面向对象的PHP编程--基础篇
    百度电面总结
    操作系统基础知识
    快速理解C语言指针
    新手学习MongoDB的基本命令
  • 原文地址:https://www.cnblogs.com/zhangbaihua/p/5561322.html
Copyright © 2011-2022 走看看