zoukankan      html  css  js  c++  java
  • JavaScript正则表达式知识点整理

    1  正则表达式

        使用单个字符串来描述、匹配一系列符号某个句法规则的字符串,可以简单理解为按照某种规则去匹配符合条件的字符串。

         Ps:https://regexper.com/  可帮助理解正则表达式,正则表达式工具

     

     

    2  regexp对象         

        JavaScript通过内置对象RegExp支持正则表达式,有两种方法实例化RegExp对象:字面量、构造函数

     

     

    3  预定义类

      .         等价于 [^ ]          即除了回车符和换行符之外的所有字符

      d        等价于[0-9]            即数字字符

      D        等价于[^0-9]           即非数字字符

      s        等价于[ x0Bf ]     即空白符

      S        等价于[^ x0Bf ]    即非空白符

      w       等价于[A-Za-z_0-9]       即单词字符

      W       等价于[^a-Za-z_0-9]      即非单词字符

     

     

    4  边界字符

      ^  即以xxx开始

      $  即以xxx结束

       即单词边界

      B 即非单词边界

     

     

    5  量词

      ?  即出现0次或1次,最多1次

      +  即出现1次或多次,最少1次

     *  即出现0次或多次,任意次

    {n} 即出现n次

    {n,m} 即出现n到m次

    {n,}   即至少出现n次

     

     

    6  贪婪模式

       d{3,6}   //尽可能多的匹配

     

     

    7  非贪婪模式

       让正则表达式尽可能少的匹配,即一旦匹配成功匹配不再继续尝试。在量词后面加上?即可。

      ‘123456789’.match(/d{3,5}?/g)

     

     

    8  分组

       使用()可以达到分组的功能,使量词作用于分组

       (Byron){3}

     

     

    9  或

       使用|可以达到或的效果

       Byron|Casper          Byr(on|Ca)sper

     

     

    10 反向引用

       2015-12-25  =》 12/25/2015

       ‘2015-12-25’.replace(/(d{4})-(d{2})-(d{2})/g,’$2$3$1’)

     

     

    11  忽略分组

         不希望捕获某些分组,只需要在分组内加上?:即可

       (?:Byron).(ok)

     

     

    12  前瞻

          正则表达式从文本头部向尾部开始解析,文本尾部方向,称为“前”。前瞻就是在正则表达式匹配到规则的时候,向前检查是否符合断言。

          符合和不符合特定断言称为肯定/正向匹配和否定/负向匹配。

     

         正向前瞻:exp(?=asser)

         负向前瞻:exp(!=asser)

    console.log('a2*3'.replace(/w(?=d)/g,'x')); //x2*3 
    console.log('a2*34v8'.replace(/w(?=d)/g,'x'));//x2*x4x8 
    console.log('a2*34vv'.replace(/w(?=d)/g,'x'));//x2*x4vv 
    console.log('a2*34vv'.replace(/w(?!d)/g,'x'));//ax*3xxx
    

     

    13  对象属性

          global:是否全局搜索,默认false;

          ignore:是否大小写敏感,默认false;

          multiline:多行搜索,默认值false;

          lastIndex:是当前表达式匹配内容的最后一个字符的下一个位置

          source:正则表达式的文本字符串;

     

     

    14  正则对象方法

       (1)     RegExp.prototype.exec(str):使用正则表达式对字符串执行搜索,并将更新全局RegExp对象的书写以匹配结果。如果没有匹配的文本则返回null,否则返回一个结果数组。Index声明匹配文本的第一个字符的位置;input存放检索的字符串string。

           非全局调用:调用非全局的RegExp对象的exec()时,返回数组;第一个元素是与正则表达式相匹配的文本,第二个元素是与RegExpObject的第一个子表达式相匹配的文本(如果有的话),第三个元素是与RegExp对象的第二个子表达式相匹配的文本(如果有的话),以此类推。

    var reg3=/d(w)d/; 
    var reg4=/d(w)d/g; 
    var ts='1a2b3c4d5e'; 
    var ret=reg3.exec(ts); 
    console.log(reg3.lastIndex + '	' + ret.index + '	' + ret.toString());//0 0  1a2,a 
    console.log(reg3.lastIndex + '	' + ret.index + '	' + ret.toString());//0 0  1a2,a 
    while(ret = reg4.exec(ts)){ 
        console.log(reg4.lastIndex + '	' + ret.index + '	' + ret.toString());//3 0  1a2,a   //7    4  3c4,c 
    }
    

     (2)RegExp.prototype.test(str):用于测试字符串参数中是否存在匹配正则表达式模式的字符串。如果存在则返回true,否则返回false。

     

     

    14  string与正则相关方法

    (1)String.prototype.search(reg):用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串;方法返回第一个匹配结果index,查找不到返回-1;search()方法不执行全局匹配,它将忽略g标志,且总是从字符串的开始进行检索。

    console.log("javascript".search(/script/i));//4
    

    (2)String.prototype.match(reg):match()方法将检索字符串,以找到一个或多个与regexp匹配的文本;regexp是否具有标志g对结果影响很大。

    如果regexp没有g标志,则match()方法就只能在字符串中执行一次匹配;如果没有找到任何匹配的文本,将返回null,否则返回一个数组,其中存放了与它找到的匹配文本有关的信息。返回数组的第一个元素存放的是匹配文本,而其余的元素存放的是与正则表达式的子表达式匹配的文本;除了常规的数组元素外,返回的数组还包括2个对象属性,index声明匹配文本的起始字符在字符串的位置,input声明对stringObject的引用。

    如果regexp具有全局标志g,则match()方法将执行全局检索,找到字符串中的所有匹配子字符串;没有找到任何匹配的子串则返回null,如果找到了一个或多个匹配子串,则返回一个数组。数组元素中存放是字符串中所有的匹配子串,且没有index或input属性。

    var reg3=/d(w)d/; 
    var reg4=/d(w)d/g; 
    var ts='$1a2b3c4d5e'; 
    var ret=ts.match(reg3); 
    console.log(ret);//[ '1a2', 'a', index: 1, input: '$1a2b3c4d5e' ] 
    console.log(ret.index + '	' +reg3.lastIndex);//1  0 
     
    ret = ts.match(reg4); 
    console.log(ret);//[ '1a2', '3c4' ] 
    console.log(ret.index + '	' + reg4.lastIndex);//undefined 0
    

    (3)String.prototype.split(reg):经常使用split()方法将字符串分割为字符数组,

    console.log('a,b,c,d'.split(','));  //[“a”,”b”,”c”,”d”] 
    console.log('a1b2c3d'.split(/d/)); //[“a”,”b”,”c”,”d”]
    

    (4)String.prototype.replace():

    String.prototype.replace(str,replaceStr);
    
    String.prototype.replace(reg,replaceStr)
    
    String.prototype.replace(reg,function)
    

     

    其中,function参数含义,function会在每次匹配替换的时候调用,有四个参数:匹配字符串、正则表达式分组内容,没有分组则没有该参数、匹配项在字符串中的index、原字符串。

    宝剑锋从磨砺出,梅花香自苦寒来。
  • 相关阅读:
    堆排序
    上线打包不常见错误整理
    ios开发者相关的几个apple邮箱
    App被拒选择回复还是重新提审,如何选择最高效的应对方式?
    iOS证书(.p12)和描述文件(.mobileprovision)申请
    OC与Swift混编
    tableViewCell重用
    tabBar选择不同item设置标题不同颜色
    iOS 关于TouchID指纹解锁的实现
    cocoaPods报错You need at least git version 1.8.5 to use CocoaPods
  • 原文地址:https://www.cnblogs.com/haimengqingyuan/p/7252915.html
Copyright © 2011-2022 走看看