zoukankan      html  css  js  c++  java
  • 如何正确拆分正则表达式

    正确拆分正则表达式

    • 正则方便了开发的同时,也是很多开发者比较苦恼的一件事情,一开始如何需求小的情况下还是比较好些的,那么要求比较难道时候,写出来的自己都看不出来是什么了,甚至还有人称正则表达式为火星文

    拆分正则代码块,是理解正则的关键

    JavaScript 正则表达式有以下结构:

    • 字面量: 匹配一个具体字符,如 a 匹配字符 a。
    • 字符组: 匹配一个有多种可能性的字符,如 [0-9] 匹配任意一个数字。
    • 量词: 匹配一个连续出现的字符,如 a{1,3} 匹配连续最多出现 3 次的a字符。
    • 锚: 匹配一个位置,如 ^ 匹配字符串的开头。
    • 分组: 匹配一个整体,如 (ab) 匹配 ab 两个字符连续出现。
    • 分支: 匹配一个或多个表达式,如 ab|bc 匹配 ab 或 bc 字符。

    1.注意要点

    • 匹配字符串整体

    不能写成 /^abc|bcd$/ ,而是要写成 /^(abc|bcd)$/。

    • 量词连缀问题
      需要匹配:每个字符是 a/b/c 中其中一个,并且字符串长度是 3 的倍数:

    不能写成 /[1]{3}+$/ ,而是要写成 /([abc]{3})+/。

    • 元字符转义问题

    元字符就是正则中的特殊字符,当匹配元字符就需要转义,如:

    ^、$、.、*、+、?、|、、/、(、)、[、]、{、}、=、!、:、- 。

    // "[abc]"  => /[abc]/ 或者 /[abc]/ 
    // "{1,3}"  => /{1}/ 或者 /{1}/ 因为不构成字符组
    

    2. 案例分析

    • 身份证号码
    /^(d{15}|d{17})[dxX]$/.test("390999199999999999");// true
    
    • IPV4
    let r = /^((0{0,2}d|0?d{2}|1d{2}|2[0-4]d|25[0-5]).){3}(0{0,2}d|0?d{2}|1d{2}|2[0-4]d|25[0-5])$ // true
    

    1. abc ↩︎

  • 相关阅读:
    浅谈 unix, linux, ios, android 区别和联系
    比 Java 更具争议的 PHP,处处留坑?
    JavaScript 对象
    前端:for、foreach、for in、for of、$.each、$().each的区别
    java按照关键字指定的key删除redis(支持模糊删除)
    单点登录SSO
    页面打印的总结
    Jquery对selec操作的总结
    JS判断操作系统
    动态生成js的正则,替换字符串
  • 原文地址:https://www.cnblogs.com/sunhang32/p/11888325.html
Copyright © 2011-2022 走看看