zoukankan      html  css  js  c++  java
  • 正则表达式总结

    在JavaScript中用正则表达式是最常见不过了,正则看起来像天书,理解了之后其实不难,下面我将总结一下各种正则字符的意思。客官请慢用:

    元字符

    符号 含义
     元字符,代表单词的开头或结尾,也就是单词的分界处,不匹配任意一个字符,只匹配一个位置
    . 元字符,匹配除了换行符以外的任意字符
    * 可以连续重复使用任意次
    w 匹配字母或数字或下划线
    s 匹配空格符
    d 匹配数字
    ^ 匹配字符串开始
    $ 匹配字符串结束

    重复

    符号 含义
    * 重复0次或多次
    + 重复1次或多次
    ? 重复0次或1次
    {n} 重复N次
    {n, } 重复N次或更多次
    {n, m} 重复n到m次

    字符类

    符号 含义
    [] 匹配[]中的任意一个字符

    例子:匹配(010)88886666022-2233445502912345678,
    正则表达式: /(?0d{2}[-)]?d{8}/

    分支条件

    上述表达式中也能匹配010)12345678(022-87654321这样的“不正确”的格式。要解决这个问题要用到分支条件。所以上述的正则表达式可以改写为/(?0d{2})[-]?d{8}|0d{2}[-]?d{8}/

    符号 含义
    | 匹配|的左右两边的条件,任意一个符合就匹配

    分组

    重复多个字符时,可以使用()来表示。比如:(d{1,3}.){3}d{1,3}是一个简单的IP地址匹配。
    然而像256.300.888.999这种不可能存在的IP地址。所以我们改写一下,一个正确的IP地址正则表达式应该是/((2[0-4]d|25[0-5]|[01]?d?d).){3}(2[0-4]d|25[0-5]|[01]?d?d)/

    反义

    符号 含义
    W 匹配任意不是字母,数字,下划线,汉字的字符
    S 匹配任意不是空白符的字符
    D 匹配任意非数字的字符
    B 匹配不是单词开头或结束的位置
    [^x] 匹配除了x以外的任意字符
    [^aeiou] 匹配除了aeiou这几个字母以外的任意字符

    后向引用

    使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是捕获的内容)。默认情况下,每个分组会自动拥有一个组号,规则是:从左往右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推

    符号 含义
    1 2 3 ... 表示匹配第N个出现的捕获组
    k<Word> 自定义捕获组
    (?:exp) 表示匹配exp,但不捕获匹配的文本,也不给此分组分配组号

    (这里面的性质JavaScript暂不支持)也可以指定子表达式的组名。比如:<Word>w+要引用这个自定义的子表达式可以用k<Word>

    零宽断言

    用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像,^,$那样用于指定一个位置,这个位置应该满足一定的条件(断言),因此它们也被称为零宽断言

    符号 含义
    (?=exp) 也叫零宽度正预测先行断言,匹配符合exp的前面的正则的内容。比如w+(?=ing),匹配以ing结尾的单词的前面部分(除了ing以外的w+部分),如查找I'm singing while you're dancing.时,它会匹配sing和danc。
    (?<=exp) 也叫零宽度正回顾后发断言,它的作用与(?=exp)相反,匹配符合exp之后的正则的内容。比如(?<=re)w+会匹配以re开头的单词的后半部分(除了re以外的部分),例如在查找reading a book时,他会匹配ading。(这里面的性质JavaScript暂不支持)

    负向零宽断言

    符号 含义
    (?!exp) 也叫零宽度负预测先行断言,断言此位置的后面不能匹配表达式exp。例如:d{3}(?!d)匹配三位数字,而且这三位数字的后面不能是数字。
    (?<!exp) 也叫零宽度负回顾后发断言,与上面的(?!exp)含义相反,表示断言此位置的前面不能匹配表达式exp。例如:(?<![a-z])d{7}匹配前面不是小写字母的七位数字(这里面的性质JavaScript暂不支持)

    参考链接:

  • 相关阅读:
    我要好offer之 二叉树大总结
    我要好offer之 字符串相关大总结
    楼层扔鸡蛋问题[转]
    Linux System Programming 学习笔记(十一) 时间
    Linux System Programming 学习笔记(十) 信号
    Linux System Programming 学习笔记(九) 内存管理
    Linux System Programming 学习笔记(八) 文件和目录管理
    Linux System Programming 学习笔记(七) 线程
    Linux System Programming 学习笔记(六) 进程调度
    APUE 学习笔记(十一) 网络IPC:套接字
  • 原文地址:https://www.cnblogs.com/haiku/p/7192517.html
Copyright © 2011-2022 走看看