美文网首页很常
正则表达式

正则表达式

作者: 看谷秀 | 来源:发表于2021-04-16 18:00 被阅读0次
    1498119150750748.jpg

    正则表达式

    Test 表示 检测
    Exec 表示捕获
    
    一: 基础元字符

    \color{gray} {作用: 组成正则的基本符号 (共计9个)}

    \s 表示空格
    \S 表示非空格
    \t  制表符 tab符号
    \d 数字字符 0-9
    \D 非数字 
    \w 数字 字母 下划线 三者必须有一个
    \W 非数字,字母,下划线以外的字符  
     . 表示除换行外 任意字符(除换行\n外,)
     \ 表示转义符,没有意义变成有意义,有意义变成没有意义
    
    例如 
      /./表示字符串里面必须含有一个除换行以外的字符 
      / \./表示字符串里面需要一个.
      /\\/ 表示一个反斜线文本
    
    二: 边界元字符
    ^ 开始 $结束 (共计2个)
    ^ 字符串开始
    1 /^\d/  表示数字开始的字符串
    2 $  表示字符串结束
        /\d$/ 表示数字结尾的字符串
        /\^d$/: 表示一个字符,开始到只能有一个数字
    
    三: 限定符

    \color{gray} {作用: 限定元字符 (6个)}

    Ps: 都属于贪婪捕获: 尽可能多的捕获内容
    写在普通元字符后面
    修饰前面一个符号的次数(注意是前面一个)
    1>  * 表示出现0~多次
    /\d*/ 表示字符串可以 出现0-n个数字
    /^\d*$/ 表示开始到结束 都只能是数字 0-n个都可以
    
    2> + 表示1~n次   
     /^\d+$/:表示字符串中的数字需要是1-n个
    
    3> ? 表示出现0-1次  (有或没有)
    表示千面修饰的元素项是可选的,可有可无
    t1: \d{5}(-\d{4})? //代表(-\d{4}) 有没有都可以
    t2: abc? /代表c可有可无,abc/ ab都可以 
    
    4> {n} 表示出现n次 (注意里面不能有空格)
    例: /^\d{3}$/: 表示字符串中的数字是3个
    
    5> {n,}表示n到多次
    例: /^\d{3,}$/: 表示字符串中的数字是3个以上(包含3)
    
    6> {n,m}表示个数是n~m个区间中
    注意!!!  修饰的是前面一个字符
    例: 
    /abcd{2}/  abcdd 符合
    /(abcd){2}/  abcdabcd符合 abcd作为一个整体
    
    四: 非贪婪捕获
    非贪婪捕获: 尽可能少的捕获内容
    *?          表示: 0-多次,获取0
    +?          表示: 1到多次,获取1
    ??          表示: 0-1次,获取0
    {n}?        表示: n次,获取n
    {n,}?       表示: n到多次,获取n
    {n,m}?      表示: n-m次,获取n次
    例 说的是捕获哈
    /\d{3,}/   捕获>=三个
    /\d{3,}?/  仅仅捕获三个
    
    五: 特殊字符-(6个)
    1> () 1.1 一个整体; 1.2单独捕获小分组
    2> (?:) 整体匹配但是不捕获
    3> | 占位 表示左边右边的都行,多和(|)出现
    4> [] 表示内部任意一个都行(一个字符哈 )
    5> [^] 占一个子字符位置,非里面的任意一个都行(一个字符哈)
    6> - 中划线 表示到/至什么,配合[-]使用,([n-m]从n-m 确保ASCII连着的)
    
    ps:()单独捕获介绍
    const reg = /\d+\s+\d+/ 代表 (1-n个数字)+(1-n个数字空格)+(1-n个数字)
    console.log(reg.exec('123 123'))
    返回值: [0: '123'  '123']
    const reg = /\d+(\s)\d+/ 代表 (1-n个数字)+(1-n个数字空格)+(1-n个数字)
    返回值: [0: '123'  '123', 1 ' ' ] //数组中的1号把()的内容单独捕获出来
    
    练习题
    例题1 const reg = /^abc|def$/
    表示已abc开头或者以def结尾都可以的
    匹配abc 是ok的
    
    例题2 const reg = /^ab(c|d)ef$/
    表示 ab开头c/d中间都行ef结尾
    
    例题3 /[abcd]/
    表示字符串只能由一个字符组成,包含a/b/c/d任意字符就可以
    
    例题4 /^[abcd]$/ 表示字符串只能为一个字符可以是四个中的任意一个字符
    /^[^abcd]$/ 字符串中不能包含四个中的任意字符
    
     例题5/^[^abcd]$/
    表示字符传只能有一个字符组成,不能是abcd中的任意一个字符
    
    常见组合形式
    /^[0-9]$/  表示一个字符, 0-9 任意一位数字字符 等价于\d
    /^[^0-9]$/ 表示一个字符, 非0-9 任意一位数字字符 等价于\D
    /^[a-z]$/  表示一个字符, a-z任意一位字母字符 
    /^[0-9a-zA-Z_]$/  表示一个字符, 字母数字下划线任意一位字符 等 价于\w
    /^[^0-9a-zA-Z_]$/ 表示一个字符, 非(字母,数字和下划线)任意一位字符 等 价于\W
    /[ ]/ 表示一个字符,空格 等价于\s
    /[^ ] 表示一个字符,非空格 等价于\S
    
    ps: 注意.在[.] [^.]内只代表”.”文本,不代表元字符的意义(即非换行的任意字符)
    /^[abc.]$/  //代表一个字符,a或b或c或.四个字符任意一个
    
    测试题 
    /^[0-9a-zA-Z]{1}[0-9a-zA-Z_] {5-11}$/
    /^[0-9a-zA-Z]\w {5-11}$/
    
    六: 正则表达式的预查/断言
    正向预查
    正向肯定预查 (?=)
    当我捕获一个内容的时候,后面必须跟着的是我选择的
    正向否定预查( ?!)
    当我捕获一个内容的时候,后面必须不是跟着的是我选择的
    负向预查
    负向肯定预查 (?<=) 
    当我捕获一个内容的时候,前面必须跟着的是我选择的
    负向否定预查 (?<!) 
    当我捕获一个内容的时候,前面必须跟着的不是我选择的
    
    例如:
    /^(?!test).*$/
    
    七: 重复出现
    \num
    \1 表示重复出现第一个()一模一样的内容
    ps:这货捕获用的
    
    /(abc|def)\d+\1/
    abc123abc  Yes
    abc123def   NO
    
    /([abcd])\d+([abcd])\d+\1\2/
    a1234b1234ab 符合规则
    Ps :注意  a和第一个小括号的元素一样
    b和第二个小括号元素一样
    
    ?:用法:整体匹配但不捕获
    /(?:[abcd])\d+([abcd])\d+\1/
    a1234b1234b yes
    a1234b1234a no
    ps:由于(?:[abcd]) 不捕获,so第一位应该捕获是([abcd])中的b
    
    八: 练习题
    1 邮箱 
    /^[a-zA-Z0-9]\w{5,7}@(qq|sina|163)\.(com|cn)$/
    /^[a-zA-Z0-9][a-zA-Z0-9_]{5,7}@(qq|sina|163)(.com|.cn)$/
    2 抓手机号号段
    /^(?:\+86)?(133|152)\d{8}$/
    ?: 匹配不捕获
    ? +86可能没有
    
    九: 标识符
    1 写在正则表达式的外面
    2 用来修饰整个正则表达式
    1> i  忽略大小写
    2> g 全局
    3> y 粘性全局
    PS: 写在后面 吊吊吊
    
    i 用法
    /^[abcd]*$/ :abcd任意字符出现 0次或者多次
    /^[abcd]*$/ i abcd/ABCD任意字符出现 0次或者多次
    
    g 用法 全局
    捕获用的 捕获全局的
    str = abc123abc123abc123
    exec(/\d{3}/) 仅仅捕获123
    exec(/\d{3}/g) 仅仅捕获123 123 123 全局的123都能捕获出来
    
    y 用法 粘性全局
    str = abc123abc123abc123
    exec(/\d{3}/y) null
    
    str = 123abc456abc123
    exec(/\d{3}/y) 123
    exec(/\d{3}/y) null
    
    str = 123456abc123
    exec(/\d{3}/y) 123
    exec(/\d{3}/y) 456
    
    Ps: 第一次就需要连续数字,第二次接第一次连续必须也是数字 仔细体会
    
    十: 创建正则表达式??
    练习1 > 6-12位字符串仅为字母数字和下划线,且下划线不能出现在首位
    /^[0-9a-zA-Z]\w{5,11}$/
    
    练习2 > 字符串仅为数字(+:1-n次的纯数字)
    /\d+/ 
    
    练习3 > 字符串仅为字母(大小写字母)
    /[a-z]+/I 
    

    相关文章

      网友评论

        本文标题:正则表达式

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