• 正则表达式之小有名气


    在上一篇文章已经讲了如何匹配简单的字符串,如何全局搜索,以及一些特殊字母i,g,m所代表的含义
    这篇文章讲的内容有点多最好分两次读,不过不用担心很多东西并不需要你特意记住
    知道有那么一回事先用先查都OK

    再谈^和$

    之前已经了解过[^abc]表示除a,b,c之外的字符,现在又要多一种用法了
    /^test/  表示以test开头的字符 这里的^表示以...开头
    
    那么$表示什么呢? 它的含义是以...结尾
    /test$/ 表示以test结尾的字符
    

    转义

    首先我们要知道并不是所有的字符都与自身等价的,比如/hello/表示我们要匹配‘hello’字符,但是如果想匹配food$并不能这么写/food$/,因为$有独特的含义,就像我们上篇文章学到的[],^这几个符号一样。如果想要匹配'food$'这个字符串,那就需要用反斜杠进行转义,通俗的说就是在特殊符号前面加上 就像这样
    /food$/ 匹配food$字符
    

    从webpack配置学正则

    我copy了一段webpack配置,只看rules中test表示的正则就可以
    在正则中.也有特定的含义,所以如果把它当字符进行匹配的话也要进行转义根据上面所学到的,判断下面代码中的正则表达式所代表的含义,答案我已经写在注释中了
    
    module.exports = {
      module: {
        rules: [
          { test: /.css$/, use: 'css-loader' },//以.css结尾的 使用css-loader处理
          { test: /.ts$/, use: 'ts-loader' }// 以.ts结尾的
        ]
      }
    };
    

    重复匹配

    如果要匹配四个‘a’字符,我们当然可以用/aaaa/这样表示,如果匹配5个'a' 10个'a'呢?正则没那么‘傻’早已为我们准备了简便方法/a{4}/ 表示匹配含有连续4个'a'的字符
    在重复选项上,正则提供了很多方式
    • 在一个字符后面加一个'?',可以定义该字符是可选的(可以出现一次或者根本不出现)
    /t?est/  可以匹配 test 或者 est
    
    • 如果一个字符要出现一次或多次(至少出现一次),可以使用加号'+'
    /t+est/ 可以匹配test ttest tttest 而不能匹配est
    
    • 如果一个字符要出现零次或多次,可以使用星号'*' (注意与?的区别,?代表要么不出现要么只能出现一次 *代表要么不出现要么出现不止一次)
    /t*est/ 可以匹配test ttest tttest est
    
    • 也可以在字符后面的花括号里指定一个数字来表示重复次数
    /a{4}/ 匹配包含连续4个a的字符串
    
    • 也可以在字符后面的花括号指定一个重复次数的区间
    /a{4,10}/ 匹配任何含有连续4个至10个a的字符串
    
    • 还可以在省略区间中第二个值(但是要保留逗号) 这里直接上代码,用文字叙述容易迷糊
    /a{4,}/ 如果逗号后面不写第二个参数那么表示匹配任何含有连续4个或多于4个a的字符串
    
    
    这些重复操作符可以是贪婪的可以是非贪婪的,默认情况它们是贪婪的
    这里不用口语叙述,看代码更直观
    遇到连续四个a即停止搜索
    var str = "aaaabbbcaadda"
    var newStr = str.replace(/a+/,'嘿')//"嘿bbbcaadda"
    
    因为加了g进行全局匹配,我们看一看有哪些字符符合条件
    开头的4个a
    c后面的2个a
    d后面的a
    这就是贪婪匹配遇到成串的符合条件的字符,将匹配这个’串‘
    
    var str = "aaaabbbcaadda"
    var newStr = str.replace(/a+/g,'嘿')//"嘿bbbc嘿dd嘿"
    
    如果后面在'+'后跟了'?'则表示进行非贪婪匹配,具体结果请看注释
    var str = "aaaabbbcaadda"
    var newStr = str.replace(/a+?/g,'嘿')//"嘿嘿嘿嘿bbbc嘿嘿dd嘿"
    

    分组

    上面已经说到可以用/t+est/这种用法,但是+只影响它前面的t,如果想让+影响多个字符可以使用括号进行分组
    /(ab)+/ 匹配一个或多个连续出现的字符串'ab'
    
    var str = "abcdababef"
    
    var newStr = str.replace(/(ab)+/g,"嘿")//"嘿cd嘿ef"
    请注意cd后的连续两个ab被替换成一个嘿而不是两个
    

    '|'操作符

    可以使用竖线表示或者
    /a|b/ 匹配a或b字符
    
    /(ab)+|(cd)+/ 匹配出现一次或多次的“ab” 或者“cd”
    
    这一篇概念有点多,不需要一下看完,分两次看好了。本来想把一些预定义字符类写完的,转念一想灌输太多内容是不利于学习的,而且那些东西也并不是很重要,只是用的时候现查的一些字母而已。所以留到下章再说
  • 相关阅读:
    Taro 3.1 beta 发布: 开放式架构新增 4 端支持
    JS复习之深浅拷贝
    痞子衡嵌入式:MCUXpresso IDE下SDK工程导入与workspace管理机制
    痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬件那些事(2.6)- 串行NOR Flash下载算法(MCUXpresso IDE篇)
    《痞子衡嵌入式半月刊》 第 22 期
    痞子衡嵌入式:读工程师岗位工作31年退休的同事离职信有感
    痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬件那些事(2.5)- 串行NOR Flash下载算法(IAR EWARM篇)
    千万不要给女朋友解释 什么是 “羊群效应”
    保姆级教程,带你认识大数据,从0到1搭建 Hadoop 集群
    短链接服务Octopus的实现与源码开放
  • 原文地址:https://www.cnblogs.com/shigongzi/p/8654348.html
Copyright © 2020-2023  润新知