Bootstrap

【Web】0基础学Web—正则、字符串验证正则、字符串替换

0基础学Web—正则、字符串验证正则、字符串替换

正则

        []:每个[]代表一位
          [0-9a-zA-Z]
          [A-z]: 字母和 _
          [^0-9]:排除0-9
          [\u4e00-\u9fa5]: 中文
        元字符:
           \d:[0-9]
           \D:[^0-9]
           \w:[0-9a-zA-Z_]
           \W:[^0-9a-zA-Z_]
           .: 任意字符,除了\n换行
           \b: 单词边界
        量词: 贪婪匹配
           reg+ :  1-多
           reg?:   0-1
           reg*:   0-多
           reg{n,} n-多
           reg{n,m} n-m
        选择:
           (a|b|c):匹配 a 或 b 或 c
        限定符:
           ^: 开头
           $:  结尾
        贪婪匹配:能匹配多,不匹配少
        非贪婪匹配:能匹配少,不匹配多  量词后加?
        断言:
           正向确定断言:reg(?=reg2) 获取后边是reg2的reg
           正向否定断言:reg(?!reg2) 获取后边不是reg2的reg
           反向确定断言:(?<=reg2)reg 获取前边是reg2的reg
           反向否定断言:(?<!reg2)reg 获取前边不是reg2的reg
        分组:(),每个()为1组
           命名捕获分组: (?P<名字>)
           命名非捕获分组:(?:P<名字>)
           反向引用:()()\2  反向引用第2组
      python 正则验证: re模块  
           match(r'reg',string,flag(i,s,m)): 匹配以reg头的
           search(r'reg',string,flag(i,s,m)): 匹配符合reg第一个
           findAll(r'reg',string,flag(i,s,m)):
               没有分组: 返回匹配结果的列表
               有1个分组: 只返回分组匹配结果的列表
               有多个分组: 返回多个分组元组组成的列表
           sub(r'reg',r'\2替换值',string,count,flag(i,s,m))  替换
           split(r'reg',string,maxsplit,flag(i,s,m)) 拆分
      python修饰符:
           i:忽略大小写
           m: 多行匹配
           s: 匹配包括\n的任意字符
      js修饰符:
           i:忽略大小写
           m: 多行匹配
           s: 匹配包括\n的任意字符
           g: 全局匹配

      js 正则验证
         String方法:
             search
             match
             split
             replace
         RegExp:
            exec(str):随游标的移动进行检测
            test(str): 返回bool类型

正则使用

<script>
//定义正则
// let reg=new RegExp('/\d+/','g')
let reg = /^\d+$/g
//RegExp方法
//1.test返回bool
let res = reg.test('12ab3df')
console.log(res) //false
let regs = /\d+/
let ress = regs.test('12asd12')
console.log(ress)  // true
//2.通过游标移动获取
let reg2 = /\d+/g
console.log(reg2.lastIndex)  //0
let res2 = reg2.exec('12ab3df')
console.log(res2)
console.log(reg2.lastIndex)  //2
res2 = reg2.exec('12ab3df')
console.log(res2)
console.log(reg2.lastIndex) //5
res2 = reg2.exec('12ab3df')
console.log(res2)
</script>

字符串验证正则

string方法

search(reg):返回第一个符合条件的下标
match(reg):
  不是全局匹配,返回符合条件的第一个子串数组
  是全局匹配,返回符合条件的所有子串组成数组
split(reg):按照reg拆分
replace(searchvalue,newvalue):替换

regexp方法

exec(str):随游标的移动进行检测
test(str): 返回bool类型

<script>
        let reg = /\d+/g
        let str = '12ab3df'

        let res = str.search(reg)
        console.log(res) //0

        let res2 = str.match(reg)
        console.log(res2) //['12', '3']

        let res3 = str.split(reg)
        console.log(res3) //['', 'ab', 'df']
</script>

字符串替换

第一个参数:匹配到的字符串 $0
中间的参数:如果正则使用了分组匹配就为多个$1, 2 , . . . 2,... 2,...n
倒数第二个参数:匹配字符串的对应索引位置 $n+1
最后一个参数:原始字符串 $n+2

<script>
    let str = 'YYYY-MM-DD'
    let newStr = str.replace('YYYY', 2024).replace('MM', 12).replace('DD', '06')
    console.log(newStr)   //2024-12-06
    
    //改为驼峰命名
    let str2 = 'background-color'
    let newStr2 = str2.replace(/-([a-zA-Z])/, ($0, $1) => $1.toUpperCase())
    console.log(newStr2)
    
    //将所有数字替换为 w ,注意加全局匹配
    let str3 = 'a1b2c3'
    let newStr3 = str3.replace(/\d+/g, 'w')
    console.log(newStr3)  //awbwcw
    
    // 手机脱敏
    let str4 = '13047869561'
    let newStr4 = str4.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2')
    console.log(newStr4)
</script>
;