关于正则表达式

作者: 7天苹果 | 来源:发表于2017-06-10 17:15 被阅读45次

    (1)一些常用的元字符

    • . 匹配除换行符之外的任意字符,如果要包含任意字符,可使用(.|\n)

    • \w 匹配字母或数字或下划线或汉字,等价于[a-zA-Z0-9_]

    • \s 匹配任意的空白符,包含换页符\f、换行符\n、回车符\r、水平制表符\t、垂直制表符\v

    • \d 匹配数字

    • \b 匹配单词的开始或结束

    • ^ 匹配字符串的开始处

    • $ 匹配字符串的结束处。

    • * 匹配前面的子表达式任意次。

    • [xyz] 字符集合,表示其中任意一个字符。表示范围可用-链接,例如[a-z] 表示a-z之间的任意一个字母。还可以这样书写[A-Za-z0-9]。

    • [^xyz] 字符集合,表示非其中任意一个字符。表示范围可用-链接,例如[^a-z] 表示非 a-z之间的任意一个字母。

    • | 表示或(or)关系,例如 com|cn,表示匹配com或者cn。

    • () 用于分组,其分组中的内容可已通过$1-$9按顺序获取(字符串相关方法中),之后的正则中也可以通过\1-\9进行引用(正则表达式内部)。(分组0表示整个正则匹配内容或整个正则表达式)

    (2)要表示出现次数(重复)——限定符

    • a*表示字符a连续出现次数 >= 0 次
    • a+表示字符a连续出现次数 >= 1 次
    • a?表示字符a出现次数 0 或 1 次
    • a{5}表示字符a连续出现次数 5 次
    • a{5,}表示字符a连续出现次数 >= 5次
    • a{5,10}表示字符a连续出现次数为 5到10次 ,包括5和10

    (3)常用方法

    • RegExp上用来匹配提取的方法——exec()

    let matches=pattern.exec(str);
    接受一个参数:源字符串
    返回:结果数组,在没有匹配项的情况下返回null
    

    结果数组包含两个额外属性,index表示匹配项在字符串中的位置,input表示源字符串,结果数组matches第一项即matches[0]表示匹配整个正则表达式匹配的字符串,matches[n]表示于模式中第n个捕获组匹配的字符串。

    要注意的是,第一,exec()永远只返回一个匹配项(指匹配整个正则的),第二,如果设置了g修饰符,每次调用exec()会在字符串中继续查找新匹配项,不设置g修饰符,对一个字符串每次调用exec()永远只返回第一个匹配项。所以如果要匹配一个字符串中的所有需要匹配的地方,那么可以设置g修饰符,然后通过循环不断调用exec方法。

    //匹配所有ing结尾的单词
    const str="Reading and Writing";
    let pattern=/\b([a-zA-Z]+)ing\b/g; 
    let matches;
    while(matches=pattern.exec(str)){
        console.log(matches.index +' '+ matches[0] + ' ' + matches[1]);
    }
    //循环2次输出
    //0 Reading Read
    //12 Writing Writ
    
    • 判断是否匹配正则——test()

    返回true或false

    //判断数字区间在30~500
    const num = 10;
    const num1 = 50;
    let pattern = /[3-9][0-9]|[1-4][0-9]{2}|500/;
    console.log(pattern.test(num));                    //false;
    console.log(pattern.test(num1));                   //true;
    
    //判断电话号码,必须以1开始,第二位为3/5/7/8,之后为9位数字。
    const phoneNumber = 15829061748;
    const phoneNumber1 = 14023567896;
    let pattern = /^1[3|5|7|8]\d{9}$/;
    console.log(pattern.test(phoneNumber));      //true;
    console.log(pattern.test(phoneNumber1));     //false;
    
    • 匹配捕获的match方法

    在字符串上调用match方法,本质上和在正则上调用exec相同,但是match方法返回的结果数组是没有input和index属性的。

    const str="Reading and Writing";
    let pattern=/\b([a-zA-Z]+)ing\b/g; 
    //在String上调用match
    let matches=str.match(pattern);
    console.log(matches);
    //等价于在RegExp上调用exec
    let matches1=pattern.exec(str);
    console.log(matches1);
    

    相关文章

      网友评论

        本文标题:关于正则表达式

        本文链接:https://www.haomeiwen.com/subject/pxfcqxtx.html